题目描述:大家一定觉的运动以后喝可乐是一件很惬意的事情,但是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 34 1 30 0 0
样例输出:NO3提示:可参考教程.附下载地址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 <cstdio>
 2 #include <queue>
 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<Sta> 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         else
86             printf("%d\n", time);
87     }
88     return 0;
89 }

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

非常可乐(杭州电子科技大学第四届大学生程序设计竞赛)(九度2013年教程87题)相关推荐

  1. 重复 桂林电子科技大学第三届ACM程序设计竞赛

    题目链接:https://ac.nowcoder.com/acm/contest/558/B import java.util.HashSet; import java.util.Scanner;pu ...

  2. 牛客网 桂林电子科技大学第三届ACM程序设计竞赛 D.寻找-树上LCA(树上a到b的路径上离c最近的点)...

    链接:https://ac.nowcoder.com/acm/contest/558/D 来源:牛客网 寻找 小猫在研究树. 小猫在研究树上的距离. 给定一棵N个点的树,每条边边权为1. Q次询问,每 ...

  3. 湖南中医药大学信息科学与工程学院第四届大学生程序设计竞赛——正式赛题解

    目录 问题A:X星人的统计 问题B:X星人的报数 问题C:X星人的迷宫 问题D:X星人的高考 问题E:X星人的匹配 问题F:X星人的成绩 问题G:X星人的变换 问题H:X星人的游戏 问题I:X星人的宝 ...

  4. 桂林电子科技大学第三届ACM程序设计竞赛-题解

    这两天几个比赛都在一起,谁顶的住啊,打(签到)了6场,结果还有没有中奖,太真实了ヽ(`Д´)ノ︵ ┻━┻ ┻━┻ A-串串 https://ac.nowcoder.com/acm/contest/55 ...

  5. ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 A题 Visiting Peking University

    题目1 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for n ...

  6. ICPC 山东省省赛刷题 第十一届山东省大学生程序设计竞赛 ACM省赛 牛客 DGHM题

    D Dyson Box 题意:有n步,每一步都会出现一个方块,求重力向下和重力向左的方块掉下去的结果图形的周长. 分析:考虑到每个方块周长为4,如果这个方向下有方块的话,就会-2(因为上下两个方块有一 ...

  7. 华为杯大学生计算机软件大赛,关于举办2018年西安电子科技大学程序设计网络赛暨第十六届“华为杯”大学生程序设计竞赛的通知...

    各学院: 程序设计是大学生运用计算机充分展示自己分析问题和解决问题能力的一个重要途径,对于培养大学生实践能力.团队意识.创新意识.顽强意志和综合素质具有显著作用和效果.为了推动这项创新性素质教育活动的 ...

  8. 合肥工业大学网络程序设计实验报告_杭州电子科技大学网络空间安全学院2020考研数据速览,专硕竟然有缺额!!!...

    网络空间安全学院共两个专业招生,网络空间安全学硕和电子信息专硕,复试线.招生计划.上线人数统计如下: 其中招生计划为2019年9月发布.网络空间安全学硕复试线307分,高于国家线,且上线人数小于原计划 ...

  9. c语言编程杭电1008,C语言程序设计_杭州电子科技大学cyy1_3

    <C语言程序设计_杭州电子科技大学cyy1_3>由会员分享,可在线阅读,更多相关<C语言程序设计_杭州电子科技大学cyy1_3(8页珍藏版)>请在人人文库网上搜索. 1.1,可 ...

最新文章

  1. CCS如何恢复到默认界面?
  2. RHEL6 grub修复
  3. Codeforces 482 - Diverse Permutation 构造题
  4. 我是小白0基础,现在我想学习前端开发,该如何系统的学习?
  5. 程序员必杀技——《编程全能词典》即将震憾上市
  6. timeval 计时器
  7. 阿姆斯特朗数 python_Python 阿姆斯特朗数
  8. 马云卸任阿里CEO 演讲笔记
  9. 海思Hi3798 FAQ硬件设计资料分享
  10. 目录扫描工具DirBuster
  11. 关于服务器并发量的简单计算
  12. Elasticsearch:Data streams(三)
  13. python: print end=''参数意思,默认起到换行作用=='\n'
  14. 【数据采集】获取网站数据(二)
  15. [Python]PDF文件与图片转换(PyMuPDF)及转PPT
  16. ajax https带证书请求,ajax 请求https 证书
  17. 04.多元梯度下降算法
  18. linux如何查看硬盘的转速
  19. SolidWorks2018模型格式转换
  20. 几个比较好的在线生成印章网址[推荐]

热门文章

  1. SAP WM 有无保存WM Level历史库存的Table?
  2. 预告丨2018年值得关注的200场机器学习会议
  3. 史上曾被认为不可能的十大科学难题全被实现
  4. 中科院5nm激光光刻弯道超车?95后本科生DIY纳米级光刻机?背后的真实情况
  5. 《自然》深度:中国AI能在2030年制霸世界吗?
  6. 专家观点 | 李德仁:基于云计算的智慧城市运营脑
  7. 李开复:AI巨头是有史以来最难以打破的垄断
  8. 《自然》杂志:关于人类未来的工作,有三个最紧迫的问题
  9. 腾讯——这可是一只“骨骼清奇”的狗
  10. 程序员,你得一条道走到黑!