HDU1459 非常可乐(BFS) 2016-07-24 15:00 165人阅读 评论(0) 收藏
非常可乐
Problem Description
Input
Output
Sample Input
7 4 3
4 1 3
0 0 0
Sample Output
NO
3
_________________________________________________________________
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
using namespace std; int vir[105][105][105]; struct node
{
int a,b,c,va,vb,vc,cnt;;
}; bool out(node f)
{
if(f.a==f.b&&f.c==0)
return 1;
if(f.a==f.c&&f.b==0)
return 1;
if(f.c==f.b&&f.a==0)
return 1;
return 0;
} int bfs(int s,int m,int n)
{
queue<node>q;
node f,d;
f.va=d.va=s;
f.vb=d.vb=m;
f.vc=d.vc=n;
f.a=s;
f.b=0;
f.c=0;
f.cnt=0;
vir[f.a][f.b][f.c]=1;
q.push(f);
while(!q.empty())
{
f=q.front();
q.pop(); if(out(f))
{
return f.cnt;
}
//a->bc
if(f.a>0)
{
//a->b
d.c=f.c;
if(f.a<=f.vb-f.b)//a-all>b
{
d.a=0;
d.b=f.b+f.a;
}
else
{
d.a=f.a-(f.vb-f.b);
d.b=d.vb;
}
if(vir[d.a][d.b][d.c]==0)
{
vir[d.a][d.b][d.c]=1;
d.cnt=f.cnt+1;
q.push(d);
} //a->c
d.b=f.b;
if(f.a<=f.vc-f.c)//a-all>c
{
d.a=0;
d.c=f.c+f.a;
}
else
{
d.a=f.a-(f.vc-f.c);
d.c=d.vc;
}
if(vir[d.a][d.b][d.c]==0)
{
vir[d.a][d.b][d.c]=1;
d.cnt=f.cnt+1;
q.push(d);
}
} //b->ac
if(f.b>0)
{
//b->a
d.c=f.c;
if(f.b<=f.va-f.a)//b-all>a
{
d.b=0;
d.a=f.a+f.b;
}
else
{
d.b=f.b-(f.va-f.a);
d.a=d.va;
}
if(vir[d.a][d.b][d.c]==0)
{
vir[d.a][d.b][d.c]=1;
d.cnt=f.cnt+1;
q.push(d);
} //b->c
d.a=f.a;
if(f.b<=f.vc-f.c)//a-all>c
{
d.b=0;
d.c=f.c+f.b;
}
else
{
d.b=f.b-(f.vc-f.c);
d.c=d.vc;
}
if(vir[d.a][d.b][d.c]==0)
{
vir[d.a][d.b][d.c]=1;
d.cnt=f.cnt+1;
q.push(d);
}
} //c->ab
if(f.c>0)
{
//c->b
d.a=f.a;
if(f.c<=f.vb-f.b)//c-all>b
{
d.c=0;
d.b=f.b+f.c;
}
else
{
d.c=f.c-(f.vb-f.b);
d.b=d.vb;
}
if(vir[d.a][d.b][d.c]==0)
{
vir[d.a][d.b][d.c]=1;
d.cnt=f.cnt+1;
q.push(d);
} //c->a
d.b=f.b;
if(f.c<=f.va-f.a)//c-all>a
{
d.c=0;
d.a=f.a+f.c;
}
else
{
d.c=f.c-(f.va-f.a);
d.a=d.va;
}
if(vir[d.a][d.b][d.c]==0)
{
vir[d.a][d.b][d.c]=1;
d.cnt=f.cnt+1;
q.push(d);
}
}
}
return -1;
} int main()
{
int s,m,n;
while(~scanf("%d%d%d",&s,&m,&n)&&(s||m||n))
{
if(s%2)
printf("NO\n");
else
{
memset(vir,0,sizeof(vir));
int ans=bfs(s,m,n);
if(ans==-1)
printf("NO\n");
else
printf("%d\n",ans);
} }
return 0;
}
HDU1459 非常可乐(BFS) 2016-07-24 15:00 165人阅读 评论(0) 收藏的更多相关文章
- C语言中返回字符串函数的四种实现方法 2015-05-17 15:00 23人阅读 评论(0) 收藏
C语言中返回字符串函数的四种实现方法 分类: UNIX/LINUX C/C++ 2010-12-29 02:54 11954人阅读 评论(1) 收藏 举报 语言func存储 有四种方式: 1.使用堆空 ...
- Codeforces816A Karen and Morning 2017-06-27 15:11 43人阅读 评论(0) 收藏
A. Karen and Morning time limit per test 2 seconds memory limit per test 512 megabytes input standar ...
- Hadoop常见异常及其解决方案 分类: A1_HADOOP 2014-07-09 15:02 4187人阅读 评论(0) 收藏
1.Shell$ExitCodeException 现象:运行hadoop job时出现如下异常: 14/07/09 14:42:50 INFO mapreduce.Job: Task Id : at ...
- c/c++,输入一个字符 2014-11-20 07:00 30人阅读 评论(0) 收藏
getch().getche()和getchar()函数 (1) getch()和getche()函数 这两个函数都是从键盘上读入一个字符.其调用格式为: getch(); ...
- iOS正则表达式 分类: ios技术 2015-07-14 14:00 35人阅读 评论(0) 收藏
一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- PIE(二分) 分类: 二分查找 2015-06-07 15:46 9人阅读 评论(0) 收藏
Pie Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissio ...
- 苹果应用商店AppStore审核中文指南 分类: ios相关 app相关 2015-07-27 15:33 84人阅读 评论(0) 收藏
目录 1. 条款与条件 2. 功能 3. 元数据.评级与排名 4. 位置 5. 推送通知 6. 游戏中心 7. 广告 8. 商标与商业外观 9. 媒体内容 10. 用户界面 11. 购买与货币 12. ...
- Find The Multiple 分类: 搜索 POJ 2015-08-09 15:19 3人阅读 评论(0) 收藏
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21851 Accepted: 8984 Sp ...
- Basic 分类: POJ 2015-08-03 15:49 3人阅读 评论(0) 收藏
Basic Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 905 Accepted: 228 Description The p ...
随机推荐
- 批量导入数据(Mysql)报MySQL server has gone away 问题的解决方法
问题分析 首先度娘:mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 造 ...
- KKT条件的物理意义(转)
最好的解释:https://www.quora.com/What-is-an-intuitive-explanation-of-the-KKT-conditions# 作者:卢健龙链接:https:/ ...
- websoket
http://blog.csdn.net/xueling022/article/details/52902358
- docker问题
Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work. 解决办法: # vim /usr/lib/sysctl ...
- 构造函数中的super和this的使用
super用于调用父类构造函数的部分,其必须出现在构造函数的第一行.super在调用时第一件事就是去执行父类构造函数的部分,所执行的父类构造函数与super()括号中的参数相对应. this用于在一个 ...
- HTML5 historyState pushState、replaceState
DOM中的window对象通过window.history方法提供了对浏览器历史记录的读取,让你可以在用户的访问记录中前进和后退. 从HTML5开始,我们可以开始操作这个历史记录堆栈. 1.Histo ...
- Python3 filter() 函数
Python3 filter() 函数 Python3 内置函数 描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转 ...
- ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(一)
为什么使用ListView+DataPager的方式实现分页显示? .net提供的诸多数据绑定控件,每一种都有它自己的优点和缺点.如果需要对数据进行操作,如果数据量不大的情况下,DataList和Gr ...
- 兼容多浏览器的网页复制插件(ZeroClipboard)
前言: 常规利用JS编写的网页复制功能是最简单的方法,但是只对IE有效,无法做到兼容其它浏览器,对其他浏览器也就只能弹窗提示用户手动复制了. <script type="text/ja ...
- 验证二叉查找树 · Validate Binary Search Tree
[抄题]: [思维问题]: 不知道要定义resultType, 其实用仔细分析判断条件就行了:是否是bst+最大最小值 类似于平衡二叉树:是否平衡+左右的高度差 [一句话思路]: [输入量]:空: 正 ...