HDU-1495 非常可乐(BFS)
广搜的灵活应用题:
非常可乐
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3633 Accepted Submission(s): 1514
//一共6种情况;all->big,all->small,big->small,big->all,small->all,small->big进行bfs搜索,如果未被搜到过,
//就入队列,如果出现两个瓶子里水相同就返回输出。(总水量为奇数时无解)
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct node
{
int s,n,m;
int step;
};
int hash[][][];
int s,n,m; int BFS()
{
queue<node>q;
node cur,next;
cur.s=s;
cur.n=;
cur.m=;
cur.step=;
hash[cur.s][cur.n][cur.m]=;
q.push(cur);
while(!q.empty())
{
cur=q.front();
q.pop();
if((cur.n== && cur.m==cur.s)||(cur.m== && cur.n==cur.s)||( cur.s== && cur.n==cur.m)) return cur.step;
if(cur.n!=)
{
if(cur.n>s-cur.s)
{
next.n=cur.n-(s-cur.s);
next.s=s;
next.m=cur.m;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
else
{
next.n=;
next.s=cur.s+cur.n;
next.m=cur.m;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
if(cur.n>m-cur.m)
{
next.n=cur.n-(m-cur.m);
next.m=m;
next.s=cur.s;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
else
{
next.n=;
next.m=cur.m+cur.n;
next.s=cur.s;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
} if(cur.m)
{
if(cur.m>s-cur.s)
{
next.m=cur.n-(s-cur.s);
next.s=s;
next.n=cur.n;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
else
{
next.m=;
next.s=cur.s+cur.m;
next.n=cur.n;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
if(cur.m>n-cur.n)
{
next.m=cur.m-(n-cur.n);
next.n=n;
next.s=cur.s;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
else
{
next.m=;
next.n=cur.m+cur.n;
next.s=cur.s;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
} if(cur.s)
{
if(cur.s>n-cur.n)
{
next.s=cur.s-(n-cur.n);
next.n=n;
next.m=cur.m;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
else
{
next.s=;
next.n=cur.s+cur.n;
next.m=cur.m;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
if(cur.s>m-cur.m)
{
next.s=cur.s-(m-cur.m);
next.m=m;
next.n=cur.n;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
else
{
next.s=;
next.m=cur.m+cur.s;
next.n=cur.n;
if(hash[next.s][next.n][next.m]==)
{
next.step=cur.step+;
q.push(next);
hash[next.s][next.n][next.m]=;
}
}
}
} return ;
}
int main()
{
int ans;
while(scanf("%d%d%d",&s,&n,&m),s||n||m)
{
memset(hash,,sizeof(hash)); if(s%) {printf("NO\n");continue;} ans=BFS();
if(ans) printf("%d\n",ans);
else printf("NO\n");
}
return ;
}
HDU-1495 非常可乐(BFS)的更多相关文章
- HDU 1495 非常可乐 BFS 搜索
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...
- HDU 1495 非常可乐 bfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=1495 第三个杯子的盛水量可由前两个杯子得到,而前两个杯子状态总数在100*100以内,穷举可实现 #includ ...
- (step4.2.5)hdu 1495(非常可乐——BFS)
题目大意:输入三个整数 a,b,c. a : 可乐瓶的容量,b: 甲杯的容量 ,c: 乙杯的容量.问能否用这三个被来实现饮料的平分???如果可以输出倒饮料的次数, 否则输出NO 解题思路:BFS ...
- HDU 1495 非常可乐 BFS搜索
题意:有个为三个杯子(杯子没有刻度),体积为s,n,m,s=m+n, 刚开始只有体积为s的杯子装满可乐,可以互相倒,问你最少的次数使可乐均分,如果没有结果,输出-1; 分析:直接互相倒就完了,BFS模 ...
- HDU 1495 非常可乐 BFS
题目大意:中文题不说了. 题目思路:我有同学用GCD数论写出来的代码很简洁,但是很抱歉,数论蒟蒻,我觉得比赛的时候我没办法推出.如果用BFS的话思路很简单的,就是6方向广搜,只不过稍微麻烦点.具体看代 ...
- HDU - 1495 非常可乐 bfs互倒三杯水
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- BFS(倒水问题) HDU 1495 非常可乐
题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...
- HDU 1495 非常可乐(数论,BFS)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 非常可乐---hdu 1495(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意: 有3个杯子a b c:a=b+c:然后刚开始时只有a是满的,其它为空的,然后a b c三个之间互相 ...
- HDU 1495 非常可乐(BFS倒水问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...
随机推荐
- Apache配置命令
Apache的主配置文件: 1.DocumentRoot——指定网站的根目录 提示:该目录必须存在.目录上不能有汉字或空格. 2.DirectoryIndex (1)描述:设置网站的默认首页文件.访问 ...
- struts2 I18n问题 国际化
java国际化 1.了解缺省Locale是由操作系统决定的,Locale是由语言和国家代码组成 2.国际化资源文件是由baseName+locale组成,如:MessageBundle_en_US.p ...
- 迭代map方法
Map<String, String> map=new HashMap<String,String>();map.put("1", "one&qu ...
- Greedy is Good
作者:supernova 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=greedyAlg Joh ...
- shell中的双引号,单引号,反引号
在shell中引号分为三种:单引号,双引号和反引号. 单引号 ‘ 由单引号括起来的字符都作为普通字符出现.特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释.单引号用于保持引号内所有字 ...
- Cocos2d-x课程大纲/学习路线
Cocos2d-x课程大纲/学习路线 这是什么? 这个一个Cocos2d-x技术路线的课程大纲/学习大纲. 你能用它做什么? 如果你是找工作的人, 利用本大纲, 你可以学习Cocos2d-x, 做一个 ...
- armv7a-mediatek451_001_vfp-linux-gnueabi-gcc: directory: No such file or directory 编译error
release/vm_linux/output/hisense_android/mt5399_cn_android_JB/rel/obj/oss/source/arm_mali_ko/mali400- ...
- caller和callee的区别
①.caller caller返回一个函数的引用,这个函数调用了当前的函数. 使用这个属性要注意: 1 这个属性只有当函数在执行时才有用 2 如果在javascript程序中,函数是由顶层调用的,则返 ...
- [原博客] POI系列(1)
正规.严谨.精妙. -POI 发现POI(波兰信息学奥赛)的题都很有意思.于是开刷bzoj上的poi题目(按ac人数降序..).顺手写一写题解,加深印象. 为了防止一篇文章过于长,打算每五道题另起一篇 ...
- 听同事讲 Bayesian statistics: Part 2 - Bayesian inference
听同事讲 Bayesian statistics: Part 2 - Bayesian inference 摘要:每天坐地铁上班是一件很辛苦的事,需要早起不说,如果早上开会又赶上地铁晚点,更是让人火烧 ...