HDU 1495 非常可乐(数论,BFS)
非常可乐
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14153 Accepted Submission(s): 5653
所以|x+|y|的最小值为(c+d)/2,通过x和y的通解形式显然可以看出x和y一正一负,不妨设x<0,那么就是往第一个小瓶子倒进x次,第二个小瓶子倒出y次,但是由于瓶子容积有限,所以倒进倒出操作都是通过大瓶子来解决的,一次倒进操作后为了继续使用小瓶子还要将小瓶子中可乐倒回大瓶子中,倒出操作同理,所以总操作次数是(c+d)/2*2=c+d,但是注意最后剩下的(a+b)/2体积的可乐一定是放在两个小瓶子中较大的那个中,而不是再倒回到大瓶子中,所以操作数要减一,答案就是c+d-1
下面给出AC代码:
#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
return b==?a:gcd(b,a%b);
}
int main()
{
int a,b,c;
while(cin>>a>>b>>c&&(a&&b&&c))
{
a/=gcd(b,c);
if(a&)
cout<<"NO"<<endl;
else
cout<<a-<<endl;
}
return ;
}
给出BFS解法吧
分析:
这题代码有150行 但是基本是六中情况的重复了
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int v[];
int sign[][][];
struct cup//记录遍历中3个水杯容藏可乐情况
{
int v[];
int step;
}temp; void pour(int a,int b)//倒水函数,把a杯子中的可乐倒到b杯子中
{
int sum=temp.v[a]+temp.v[b];
if(sum>=v[b])
temp.v[b]=v[b];
else
temp.v[b]=sum;
temp.v[a]=sum-temp.v[b];
} void bfs()
{
int i,j;
queue<cup>q;
cup cnt;
cnt.v[]=v[];
cnt.v[]=;
cnt.v[]=;
cnt.step=;
q.push(cnt);
memset(sign,,sizeof(sign));
sign[v[]][][]=;
while(!q.empty())
{
cnt=q.front();
q.pop();
if(cnt.v[]==cnt.v[]&&cnt.v[]==)
{
printf("%d\n",cnt.step);
return ;
}
for(i=;i<;++i)
{
for(j=;j<;++j)
{
if(i!=j)//自己不倒水给自己
{
temp=cnt;//每个水位情况都要把所有操作枚举一遍,所以都要赋值为原始水位情况
pour(i,j);
if(!sign[temp.v[]][temp.v[]][temp.v[]])
{
temp.step++;
q.push(temp);
sign[temp.v[]][temp.v[]][temp.v[]]=;
}
}
}
}
}
printf("NO\n");
} int main()
{
while(scanf("%d%d%d",&v[],&v[],&v[])&&v[]||v[]||v[])
{
if(v[]>v[])
{
int t=v[];
v[]=v[];
v[]=t;
}
bfs();
}
return ;
}
HDU 1495 非常可乐(数论,BFS)的更多相关文章
- HDU 1495 非常可乐(BFS倒水问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...
- HDU - 1495 非常可乐 【BFS】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1495 思路 首先 如果可乐的体积 是奇数 那么是无解的 然后 如果能够得到两杯 都是一般容量的可乐 那 ...
- HDU 1495 非常可乐【BFS/倒水问题】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- (中等) HDU 1495 非常可乐,BFS。
Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享 这一瓶可乐,而且一定要喝的和s ...
- HDU 1495 非常可乐【BFS】
题目链接:https://vjudge.net/problem/HDU-1495 转载于:https://www.cnblogs.com/ECJTUACM-873284962/p/6750320.ht ...
- HDU.1495 非常可乐 (BFS)
题意分析 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多 ...
- BFS(倒水问题) HDU 1495 非常可乐
题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...
- HDU 1495 非常可乐 BFS 搜索
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...
- HDU 1495 非常可乐 BFS
题目大意:中文题不说了. 题目思路:我有同学用GCD数论写出来的代码很简洁,但是很抱歉,数论蒟蒻,我觉得比赛的时候我没办法推出.如果用BFS的话思路很简单的,就是6方向广搜,只不过稍微麻烦点.具体看代 ...
随机推荐
- iOS----------如何检查域名是否支持ipv6
http://ipv6-test.com/validate.php 这个地址 也可以检测到! 1.检查你所用到的库,像af 3.0以上什么的(不用改),其他的库自己去搜下是否支持ipv6吧. 2. ...
- arcgis api for js入门开发系列十五台风轨迹
上一篇实现了demo的地图最近设施点路径分析,本篇新增台风轨迹,截图如下: 下面简单介绍相关知识点: 警戒线 警戒线坐标集合: var lineArr24=[[127,34],[127,21],[11 ...
- SET与SPLIT
所以说不要以为前一天考了什么后一天就不会考这类的东西了 出题人总是能竭尽所能 打破你的下限qaq naive split 详解blog来自ljz大佬:http://blog.csdn.net/ljz_ ...
- 关于table布局的推荐使用原因
一.关于table布局的性能 1.table标签比其他html标签占用更多字节,导致下载时间延迟,占用服务器更多的流量资源: 2.table会阻碍浏览器渲染引擎的渲染顺序,导致页面生成的延迟,造成不良 ...
- 重温javascript数据类型
在javaScript中,有五种简单的数据类型,分别是 Undefined Null Boolean Number String 还有一种复杂的数据类型object,object本质是有一组无序的名值 ...
- Linux第七节随笔-中 /date / ln /
4.date link 作用:显示或设定系统的日期与时间 参数: -d<字符串> 显示字符串所指的日期与时间.字符串前后必须加上双引号. -s<字符串> 根据字符串来设置日期与 ...
- ArrayList中对象 排序
public class Student implements Comparable { private String studentname; public int studentage; publ ...
- 正确使用volatile场景--状态标志
同步机制:volatile 特点:可见性:不具备原子性 每个线程有自己单独的内存:如果线程1和线程2公用一个变量name:如果两个线程并发进行,并且需要访问变量name:如果这个变量具有了可见性,线程 ...
- C# 各种帮助类大全
前言 此篇专门记录一些常见DB帮助类及其他帮助类,以便使用时不用重复造轮子. DBHelper帮助类 ①首当其冲的就是Sql Server帮助类,创建名为DbHelperSQL 的类 ,全部代码如下: ...
- 从开源项目看python代码注释
最近看了不少代码,也写了不少代码,所以在看和写之间发现了很多的问题,真的是很多,至少从我的认识来看,有几个地方有很大的改进空间,这里不准备把所有的问题都列举出来,所以就先挑选一个比较明显得来和大家聊聊 ...