HDU 1495 非常可乐 BFS搜索
题意:有个为三个杯子(杯子没有刻度),体积为s,n,m,s=m+n,
刚开始只有体积为s的杯子装满可乐,可以互相倒,问你最少的次数使可乐均分,如果没有结果,输出-1;
分析:直接互相倒就完了,BFS模拟
注:写的很丑
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <set>
#include <queue>
#include <cstring>
using namespace std;
typedef long long LL;
const int maxn=+;
const int INF=0x3f3f3f3f;
int a[maxn][maxn][maxn];
struct asd
{
int x,y,z;
} o,t;
queue<asd>q;
int main()
{
int s,n,m;
while(~scanf("%d%d%d",&s,&n,&m),s)
{
if(s%)
{
printf("NO\n");
continue;
}
memset(a,-,sizeof(a));
a[s][][]=;
o.x=s,o.y=,o.z=;
while(!q.empty())q.pop();
q.push(o);
int ans=-;
while(!q.empty())
{
o=q.front();
q.pop();
int cnt=;
if(o.x==s/)cnt++;
if(o.y==s/)cnt++;
if(o.z==s/)cnt++;
if(cnt==)
{
ans=a[o.x][o.y][o.z];
break;
}
if(o.x)
{
if(o.y<n)
{
int k=n-o.y;
if(o.x<=k)t.y=o.y+o.x,t.x=;
else t.y=n,t.x=o.x-k;
t.z=o.z;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
if(o.z<m)
{
int k=m-o.z;
if(o.x<=k)t.z=o.z+o.x,t.x=;
else t.z=m,t.x=o.x-k;
t.y=o.y;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
}
if(o.y)
{
if(o.x<s)
{
int k=s-o.x;
if(o.y<=k)t.x=o.x+o.y,t.y=;
else t.x=s,t.y=o.y-k;
t.z=o.z;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
if(o.z<m)
{
int k=m-o.z;
if(o.y<=k)t.z=o.z+o.y,t.y=;
else t.z=m,t.y=o.y-k;
t.x=o.x;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
}
if(o.z)
{
if(o.y<n)
{
int k=n-o.y;
if(o.z<=k)t.y=o.y+o.z,t.z=;
else t.y=n,t.z=o.z-k;
t.x=o.x;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
if(o.x<s)
{
int k=s-o.x;
if(o.z<=k)t.x=o.z+o.x,t.z=;
else t.x=s,t.z=o.z-k;
t.y=o.y;
if(a[t.x][t.y][t.z]==-)
a[t.x][t.y][t.z]=a[o.x][o.y][o.z]+,q.push(t);
}
}
}
if(ans==-)printf("NO\n");
else printf("%d\n",ans);
}
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
题目大意:中文题不说了. 题目思路:我有同学用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本地和局域网访问设置 最近做项目需要同事ajax发项目给我,因为是测试环境,所以需要能访问我的服务器.我服务器直接用的wampserver.因为没有接触过,所以百度了一下,都是没有成功,后 ...
- poj 3522 Slim Span (最小生成树kruskal)
http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions ...
- json分别算出元素的个数和最多的元素
个数: var str = 'aaafsdsaaasasasasaa'; var json = {}; for (var i = 0; i < str.length; i++) { if(!js ...
- [转载]JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
在ajax中经常需要对元素的位置进行精确的定位,此时不仅需要获取元素自身的大小位置等属性.还需要知道页面.浏览器.滚动条等的长度和宽度.因为浏览器的兼容问题,如果使用javascript获取这些数值是 ...
- Firefly的角色跳转场景简单示例
源地址:http://bbs.9miao.com/thread-45790-1-2.html 本例演示的是模拟游戏服务端,让角色在场景1中跳转到场景2中.在实际游戏中,client将要跳转的角色id和 ...
- struts2 标签的使用之一 s:if
struts2 的web 项目中为了方便的编写jsp,标签是最好的选择 1:struts2 标签库的定义在**-core-版本号.jar META-INF 路径下找到struts-tags.tld文件 ...
- pogo pin连接器塑胶部件的缺陷及产生原因分析
pogo pin连接器塑胶部件异色.褪色产品的颜色与标准颜色不同的现象.与树脂颜色不同为异色:注塑后颜色发生改变的现象为变色. 产生的主要原因:1.着色错误(色粉有误) 2.树脂污染3.过多使用粉碎品 ...
- 202. Happy Number
题目: Write an algorithm to determine if a number is "happy". A happy number is a number def ...
- POJ2531——Network Saboteur(随机化算法水一发)
Network Saboteur DescriptionA university network is composed of N computers. System administrators g ...
- 远程唤醒 N54L
远程唤醒 N54L 我的N54L装了一块买时带的WD500G黑盘,又装了一个WD2T绿盘,存些电影歌曲什么的,当NAS用,装的WIN7系统,长时间不使用就自动关机了,每次都得按一下电源开关键,于是就研 ...