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 ...
随机推荐
- Boost.Coroutine2:学习使用Coroutine(协程)
function(函数)routine(例程)coroutine (协程) 函数,例程以及协程都是指一系列的操作的集合. 函数(有返回值)以及例程(没有返回值)也被称作subroutine(子例程), ...
- nginx配置【转】
转自:http://www.ha97.com/5194.html #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_proc ...
- python网络编程——socket基础篇
python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...
- lrzsz的安装与配置
1)下载http://freshmeat.sourceforge.net/projects/lrzsz/ 2)tar zxvf lrzsz-0.12.20.tar.gz 3)mv lrzsz-0.12 ...
- VMware-克隆机,网卡修改
1.克隆 2.修改网卡eth1为eth0 -persistent-net.rules 3.配置ip vim /etc/sysconfig/network-scripts/ifcfg-etho 4.修改 ...
- 1D Blending
[1D Blending] BlendTree有类型之分,分为1D.2D.本文记录1D. 1D Blending blends the child motions according to a sin ...
- oracle,PL/SQL新建表
创建用户 -- Create the user create user U_HQ_JAVA default tablespace USERS temporary tablespace TEMP pro ...
- mongo通信协议
先是一个包头: struct MsgHeader { int32 messageLength; // total message size, including this int32 requestI ...
- 【校招面试 之 C/C++】第20题 C++ STL(二)之Vector
1.vector的动态增长 当添加元素时,如果vector空间大小不足,则会以原大小的两倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间.vector的空 ...
- Python学习记录day7
目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...