博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
非常可乐(杭州电子科技大学第四届大学生程序设计竞赛)(九度2013年教程87题)
阅读量:6695 次
发布时间:2019-06-25

本文共 2985 字,大约阅读时间需要 9 分钟。

题目描述: 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升(正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出"NO"。
输入: 三个整数 : S 可乐的体积 , N 和 M是两个杯子的容量,以"0 0 0"结束。
输出: 如果能平分的话请输出最少要倒的次数,否则输出"NO"。
样例输入: 7 4 3 4 1 3 0 0 0
样例输出: NO 3 提示:可参考教程.附下载地址 http://120.192.83.81/2/file.data.vdisk.me/49948774/f0c8e4bdf58b1a80a08cbc6d675580df763b1c55?ip=1361548192,111.15.172.124&ssig=T8hG%2BSRbkr&Expires=1361546992&KID=sae,l30zoo1wmz&fn=%E3%80%8A2013%E5%B9%B4%E7%8E%8B%E9%81%93%E8%AE%BA%E5%9D%9B%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%80%83%E7%A0%94%E6%9C%BA%E8%AF%95%E6%8C%87%E5%8D%97%E3%80%8B_20130112.pdf
1 #include 
2 #include
3 using namespace std; 4 5 bool mar[101][101][101]; 6 int S, N, M; 7 struct Sta { 8 int a, b, c, t; 9 void init(int x, int y, int z, int cost) {10 a = x;11 b = y;12 c = z;13 t = cost;14 }15 void mark() {16 mar[a][b][c] = true;17 }18 };19 Sta tt, st;20 queue
Q;21 bool AtoB(int a, int &sa, int b, int &sb) {22 if (b - sb >= sa) {23 sb += sa;24 sa = 0;25 } else {26 sa -= b - sb;27 sb = b;28 }29 if ((tt.a == S / 2 && tt.b == S / 2) || (tt.a == S / 2 && tt.c == S / 2) || (tt.b == S / 2 && tt.c == S / 2))30 return true;31 else {32 if (!mar[tt.a][tt.b][tt.c]) {33 tt.t++;34 tt.mark();35 Q.push(tt);36 }37 }38 return false;39 }40 41 int bfs() {42 while (!Q.empty()) {43 st = Q.front();44 Q.pop();45 tt = st;46 if (AtoB(S, tt.a, N, tt.b)) 47 return tt.t + 1;48 tt = st;49 if (AtoB(S, tt.a, M, tt.c))50 return tt.t + 1;51 tt = st;52 if (AtoB(N, tt.b, S, tt.a))53 return tt.t + 1;54 tt = st;55 if (AtoB(N, tt.b, M, tt.c))56 return tt.t + 1;57 tt = st;58 if (AtoB(M, tt.c, S, tt.a))59 return tt.t + 1;60 tt = st;61 if (AtoB(M, tt.c, N, tt.b))62 return tt.t + 1;63 }64 return -1;65 }66 67 int main() {68 while (~scanf("%d%d%d", &S, &N, &M) && !(S == 0 && N == 0 && M == 0)) {69 if (S % 2 == 1) {70 printf("NO\n");71 continue;72 }73 for (int i = 0; i <= S; i++)74 for (int j = 0; j <= S; j++)75 for (int k = 0; k <= S; k++)76 mar[i][j][k] = false;77 while (!Q.empty())78 Q.pop();79 tt.init(S, 0, 0, 0);80 tt.mark();81 Q.push(tt);82 int time = bfs();83 if (time == -1)84 printf("NO\n");85 else86 printf("%d\n", time);87 }88 return 0;89 }

 

转载于:https://www.cnblogs.com/babyron/archive/2013/02/22/2922992.html

你可能感兴趣的文章
BZOJ4766: 文艺计算姬(Prufer序列)
查看>>
CSS选择器
查看>>
pip3 Fatal error in launcher: Unable to create process using '"' [转]
查看>>
关于linux的用户
查看>>
ECMAScript 5 —— 单体内置对象之Global对象
查看>>
ScriptManager的简单用法
查看>>
Some index files failed to download. They have …… or old ones used instead
查看>>
list-style
查看>>
webdriverf的截图方法get_screenshot_as_file(path)
查看>>
AGC 018E.Sightseeing Plan——网格路径问题观止
查看>>
174. Dungeon Game
查看>>
Volley超时重试机制
查看>>
HDFS 和 YARN 的 HA 故障切换【转】
查看>>
FFmpeg(三) 编解码相关函数理解
查看>>
MyBatis配置项--settings
查看>>
C语言标准库
查看>>
pip安装包
查看>>
background
查看>>
WampServer修改MySQL密码的问题
查看>>
python学习第五天
查看>>