题目链接

https://cn.vjudge.net/problem/UVA-571

分析

刚做了道倒水问题的题想看看能不能水二倍经验,结果发现了这道题

题意翻译:https://www.cnblogs.com/devymex/archive/2010/08/04/1792288.html

设A容量\(x\),B容量\(y\)

我们把将水倒入A视为\(+x\),将倒空B视为\(-y\),若A满,就倒入B视为\(-x\)

由于\(a,b\)是互质的,根据裴蜀定理一定有\(x,y\)保证有\(ax+by=gcd(a,b)=1\),又因为\(y>=c>=x>=0\)那么也就保证了一定存在非负整数\(x\)和一个整数\(y\)使得\(ax+by=c\).

于是一开始我的思路是运用扩展\(GCD\)求出一组解后将\(x\)转化为一个非负数解.然后按步骤模拟就好了

然而在我写模拟步骤时忽然发现完全不用扩欧啊,我们的模拟过程其实就是:

  • 若A空,则将A倒满

  • 若B满,将B倒空

  • 若A满,将A中水倒入B中

由于题目要求输出一种解就好了于是我们直接模拟就好了,至于为什么会这样,我好像还找不到较为严谨的数学证明

代码

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <vector>
#define ll long long
#define ri register int
using std::min;
using std::max;
using std::swap;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;return ;
}
int ex_gcd(int a,int b,int x,int y){
if(!b){
x=1,y=0;
return a;
}
int d=ex_gcd(b,a%b,x,y);
int z=x;x=y,y=z-(a/b)*y;
return d;
}
int a,b,c;
int main(){
int x,y,lef;
int bot[3];
while(scanf("%d %d %d",&a,&b,&c)!=EOF){
//int d=ex_gcd(a,b,x,y);
bool flag=1;
if(b==c){
puts("fill B");
puts("success");
flag=0;
}
bot[1]=bot[2]=0;
//if(x>0){
while(1&&flag){
if(bot[2]==c){
puts("success");
break;
}
if(!bot[1]){
bot[1]=a;
puts("fill A");
}
else if(bot[2]==b){
puts("empty B");
bot[2]=0;
}
else if(bot[1]){
lef=b-bot[2];
if(lef<bot[1]){
bot[1]-=lef;
bot[2]+=lef;
}
else {
bot[2]+=bot[1];
bot[1]=0;
}
puts("pour A B");
}
//printf("%d %d\n",bot[1],bot[2]);
//system("PAUSE");
}
//}
/*else{
int k=(-c*x)/b+1;
x=c*x+k*b,y=c*y-k*a;
}*/
}
return 0;
}

UVA571Jugs题解--简单数论(其实是瞎搞)的更多相关文章

  1. [JZOJ5281]钦点题解--瞎搞+链表

    [JZOJ5281]钦点题解--瞎搞+链表 题目链接 于 暴 力 过

  2. Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞

    Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...

  3. B. Salty Fish Go! -期望题(瞎搞题)

    链接:https://www.nowcoder.com/acm/contest/104/B来源:牛客网 题意:A few days ago, WRD was playing a small game ...

  4. 8VC Venture Cup 2016 - Elimination Round B. Cards 瞎搞

    B. Cards 题目连接: http://www.codeforces.com/contest/626/problem/B Description Catherine has a deck of n ...

  5. ubuntu--基础环境瞎搞集合

    安装ubuntu系统后有很多东西需要自己瞎搞一下,这里把一些瞎搞的过程记录在这里,方便以后重新装系统后重新配置. 一.安装. 可以在windows下制作启动盘(软碟通),然后开机u盘启动即可安装,预留 ...

  6. Pairs Forming LCM (LightOJ - 1236)【简单数论】【质因数分解】【算术基本定理】(未完成)

    Pairs Forming LCM (LightOJ - 1236)[简单数论][质因数分解][算术基本定理](未完成) 标签: 入门讲座题解 数论 题目描述 Find the result of t ...

  7. Help Hanzo (LightOJ - 1197) 【简单数论】【筛区间质数】

    Help Hanzo (LightOJ - 1197) [简单数论][筛区间质数] 标签: 入门讲座题解 数论 题目描述 Amakusa, the evil spiritual leader has ...

  8. Aladdin and the Flying Carpet (LightOJ - 1341)【简单数论】【算术基本定理】【分解质因数】

    Aladdin and the Flying Carpet (LightOJ - 1341)[简单数论][算术基本定理][分解质因数](未完成) 标签:入门讲座题解 数论 题目描述 It's said ...

  9. Sigma Function (LightOJ - 1336)【简单数论】【算术基本定理】【思维】

    Sigma Function (LightOJ - 1336)[简单数论][算术基本定理][思维] 标签: 入门讲座题解 数论 题目描述 Sigma function is an interestin ...

随机推荐

  1. activemq备忘

    ActiveMQ队列消息积压问题调研 http://blog.51cto.com/winters1224/2049432ActiveMQ的插件开发介绍 https://blog.csdn.net/zh ...

  2. ios-tableViewcell展开与收缩动画处理

    [前言] 在使用华尔街见闻 app 时,看到它的 tableVeiw 上的 cell 具有很好的展开与收缩功能.于是自己想了一下实现,感觉应该挺简单的,于是心痒痒写个 demo 实现一波.华尔街见闻 ...

  3. [go]socket编程

    socket特性 总是成对出现 是全双工的(同时支持收发)(两个channel绑在一起) 应用程序 - cs模式(客户端开发) - bs模式(web开发) net包api基础 都是客户端主动发数据(c ...

  4. js 操作select和option常见用法

    1.获取选中select的value和text,html <select id="mySelect"> <option value="1"&g ...

  5. RabbitMQ学习之:(七)Fanout Exchange (转贴+我的评论)

    From:http://lostechies.com/derekgreer/2012/05/16/rabbitmq-for-windows-fanout-exchanges/ PunCha: Ther ...

  6. java web 能够实现整个文件夹的上传下载吗?

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  7. Spring Boot启动的报错 Stopping service [Tomcat]

    我遇到的问题是项目中使用java_websocket的WebSocketClient,由于性能要求,需要再Controller直接继承WebSocketClient, 在项目启动过程中调试进入spri ...

  8. JAVA 基础编程练习题2 【程序 2 输出素数】

    2 [程序 2 输出素数] 题目:判断 101-200 之间有多少个素数,并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表明此数不是素数, ...

  9. 【JVM学习笔记】字节码文件结构

    https://www.cnblogs.com/heben/p/11468285.html  比这篇笔记更好一点 新建一个Java类 package com.learn.jvm; public cla ...

  10. python代码中判断版本

    在python代码中判断python版本: if sys.version_info < (3, 0): lib.make_flows.argtypes = [c_char_p, c_char_p ...