非常可乐

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3510    Accepted Submission(s): 1440

Problem Description
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出"NO"。
 
Input
三个整数 : S 可乐的体积 , N 和 M是两个杯子的容量,以"0 0 0"结束。
 
Output
如果能平分的话请输出最少要倒的次数,否则输出"NO"。
 
Sample Input
7 4 3
4 1 3
0 0 0
 
Sample Output
NO
3

这是一题搜索题,bfs,我的思路是分为A->B , A->C , B->A , B->C , C->B , C->A 六种情况,后面4种情况,要考虑是否溢出,,,仔细一点就不会错了,哈哈

附上我的代码,有什么更好的方法,请多多指教,                                                            ps:原题 http://acm.hdu.edu.cn/showproblem.php?pid=1495

  1. #include<iostream>
  2. #include<queue>
  3. #include<cstring>
  4. using namespace std;
  5. int visit[][][];
  6. int s,m,n;
  7.  
  8. struct node
  9. {
  10. int x,y,z;
  11. int step;
  12. };
  13.  
  14. void bfs()
  15. {
  16. queue<node>Q;
  17. node now,next;
  18. now.x=s;
  19. now.y=;
  20. now.z=;
  21. visit[now.x][now.y][now.z]=;
  22. now.step=;
  23. Q.push(now);
  24. while(!Q.empty())
  25. {
  26. now=Q.front();
  27. Q.pop();
  28. if((now.x==s/&&now.x==now.y)||(now.x==s/&&now.x==now.z)||(now.y==s/&&now.y==now.z))//到达评分条件的时候跳出
  29. {
  30. printf("%d\n",now.step);
  31. return ;
  32. }
  33. if(now.x != ) //A->B,A->C
  34. {
  35. if(now.y != n)
  36. {
  37. next.x = now.x - (n - now.y);
  38. next.y = n;
  39. next.z = now.z;
  40.  
  41. if(!visit[next.x][next.y][next.z])
  42. {
  43. next.step = now.step + ;
  44. Q.push(next);
  45. visit[next.x][next.y][next.z] = ;
  46. }
  47. }
  48. if(now.z != m)
  49. {
  50. next.x = now.x - (m - now.z);
  51. next.y = now.y;
  52. next.z = m;
  53.  
  54. if(!visit[next.x][next.y][next.z])
  55. {
  56. next.step = now.step + ;
  57. Q.push(next);
  58. visit[next.x][next.y][next.z] = ;
  59. }
  60. }
  61. }
  62. if(now.y != ) //B->A,B->C
  63. {
  64. next.x = now.x + now.y;
  65. next.y = ;
  66. next.z = now.z;
  67.  
  68. if(!visit[next.x][next.y][next.z])
  69. {
  70. next.step = now.step + ;
  71. Q.push(next);
  72. visit[next.x][next.y][next.z] = ;
  73. }
  74. if(now.y < m - now.z)
  75. {
  76. next.x = now.x;
  77. next.y = ;
  78. next.z = now.y + now.z;
  79. if(!visit[next.x][next.y][next.z])
  80. {
  81. next.step = now.step + ;
  82. Q.push(next);
  83. visit[next.x][next.y][next.z] = ;
  84. }
  85. }
  86. else
  87. {
  88. next.x = now.x;
  89. next.y = now.y - (m - now.z);
  90. next.z = m;
  91. if(!visit[next.x][next.y][next.z])
  92. {
  93. next.step = now.step + ;
  94. Q.push(next);
  95. visit[next.x][next.y][next.z] = ;
  96. }
  97. }
  98. }
  99. if(now.z != ) //C->A,C->B
  100. {
  101. next.x = now.x + now.z;
  102. next.y = now.y;
  103. next.z = ;
  104. if(!visit[next.x][next.y][next.z])
  105. {
  106. next.step = now.step + ;
  107. Q.push(next);
  108. visit[next.x][next.y][next.z] = ;
  109. }
  110. if(now.z < n - now.y)
  111. {
  112. next.x = now.x;
  113. next.y = now.y + now.z;
  114. next.z = ;
  115. if(!visit[next.x][next.y][next.z])
  116. {
  117. next.step = now.step + ;
  118. Q.push(next);
  119. visit[next.x][next.y][next.z] = ;
  120. }
  121. }
  122. else
  123. {
  124. next.x = now.x;
  125. next.y = n;
  126. next.z = now.z - (n - now.y);
  127. if(!visit[next.x][next.y][next.z])
  128. {
  129. next.step = now.step + ;
  130. Q.push(next);
  131. visit[next.x][next.y][next.z] = ;
  132. }
  133. }
  134. }
  135.  
  136. }
  137. printf("NO\n");
  138. }
  139. int main()
  140. {
  141. while(scanf("%d%d%d",&s,&n,&m)!=EOF&&n||m||s)
  142. {
  143. memset(visit,,sizeof(visit));
  144. if(s%==)//s为奇数是不可能平分的,可优化。
  145. bfs();
  146. else
  147. printf("NO\n");
  148. }
  149. return ;
  150. }

代码有点冗长啊,不过有很多是重复的,求更好的方法!欢迎评论

非常可乐(杭电hdu1495)bfs的更多相关文章

  1. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  2. 杭电ACM题单

    杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 1007 经典问题,最 ...

  3. 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)

    今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...

  4. acm入门 杭电1001题 有关溢出的考虑

    最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...

  5. 杭电acm 1002 大数模板(一)

    从杭电第一题开始A,发现做到1002就不会了,经过几天时间终于A出来了,顺便整理了一下关于大数的东西 其实这是刘汝佳老师在<算法竞赛 经典入门 第二版> 中所讲的模板,代码原封不动写上的, ...

  6. 杭电OJ——1198 Farm Irrigation (并查集)

    畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...

  7. 高手看了,感觉惨不忍睹——关于“【ACM】杭电ACM题一直WA求高手看看代码”

    按 被中科大软件学院二年级研究生 HCOONa 骂为“误人子弟”之后(见:<中科大的那位,敢更不要脸点么?> ),继续“误人子弟”. 问题: 题目:(感谢 王爱学志 网友对题目给出的翻译) ...

  8. C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~

    暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...

  9. 杭电ACM2076--夹角有多大(题目已修改,注意读题)

    杭电ACM2076--夹角有多大(题目已修改,注意读题) http://acm.hdu.edu.cn/showproblem.php?pid=2076 思路很简单.直接贴代码.过程分析有点耗时间. / ...

随机推荐

  1. VS2017+EF+Mysql生成实体数据模型(解决闪退的坑) 版本对应才行

    最近要使用VS2017+EF+Mysql,在生成实体数据模型踏过一些坑,在此做个总结. 1.先下载并安装 mysql-connector-net-6.9.10.msi  和  mysql-for-vi ...

  2. 利用App漏洞获利2800多万元,企业该如何避免类似事件?

    上个月,上海警方抓捕了一个利用网上银行漏洞非法获利的犯罪团伙,该团伙利用银行App漏洞非法获利2800多万元. 据悉,该团伙使用技术软件成倍放大定期存单金额,从而非法获利.理财邦的一篇文章分析了犯罪嫌 ...

  3. SAP接口的调用

    最近做一个专案用到的SAO接口的调用,用到的上传参数获取回传的IRfcTable,以及以IRfcTable作为参数上传SAP,通过查阅很多资料,发现资料说明的也多是鱼龙混杂,许多没有实现就直接贴在上面 ...

  4. jQuery基础(3)- ajax

    一.jQuery的ajax 1.什么是ajax AJAX = 异步的javascript和XML(Asynchronous Javascript and XML). 简言之,在不重载整个网页的情况下, ...

  5. mybatis四大接口之 StatementHandler

    1. 继承结构 StatementHandler:顶层接口 BaseStatementHandler : 实现顶层接口的抽象类,实现了部分接口,并定义了一个抽象方法 SimpleStatementHa ...

  6. (转) argparse — 解析命令参数和选项

    原文地址:https://pythoncaff.com/docs/pymotw/argparse-command-line-option-and-argument-parsing/166 https: ...

  7. 【从0到1学Web前端】CSS定位问题一(盒模型,浮动,BFC) 分类: HTML+CSS 2015-05-27 22:24 813人阅读 评论(1) 收藏

    引子: 在谈到css定位问题的时候先来看一个小问题: 已知宽度(假如:100px)div框,水平居中,左右两百年的分别使用div框填充.且左右div自适应. 效果如下图: 这个问题的难点主要是浏览器宽 ...

  8. Choose GitLab for your next open source project

    原文:https://b.agilob.net/choose-gitlab-for-your-next-project/ GitLab.com is a competitor of GIthub. I ...

  9. 杂谈:Windows操作系统的介绍与对Win8操作系统市场反响冷淡原因的分析

    Windows操作系统,毫无疑问是操作系统市场上的霸主,也正因为Windows操作系统的诞生让电脑的操作性能变得更加平民化,深的用户的喜爱.至今身边的人也是选择windows操作系统的居多,这篇文章也 ...

  10. 第三方登录:QQ登录实现(OAuth2.0)

    一.创建应用 1.在 QQ互联 创建应用 地址:https://connect.qq.com/manage.html#/ 然后进行实名认证,创建应用,审核通过 然后点击查看,可以获得 APP ID 和 ...