题目传送门

  1. /*
  2. BFS:倒水问题,当C是奇数时无解。一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue
  3. 结果找了半天才发现bug,泪流满面。。。。(网上找份好看的题解都难啊)
  4. */
  5. /************************************************
  6. Author :Running_Time
  7. Created Time :2015-8-4 10:54:16
  8. File Name :HDOJ_1495.cpp
  9. ************************************************/
  10. #include <cstdio>
  11. #include <algorithm>
  12. #include <iostream>
  13. #include <sstream>
  14. #include <cstring>
  15. #include <cmath>
  16. #include <string>
  17. #include <vector>
  18. #include <queue>
  19. #include <deque>
  20. #include <stack>
  21. #include <list>
  22. #include <map>
  23. #include <set>
  24. #include <bitset>
  25. #include <cstdlib>
  26. #include <ctime>
  27. using namespace std;
  28. #define lson l, mid, rt << 1
  29. #define rson mid + 1, r, rt << 1 | 1
  30. typedef long long ll;
  31. const int MAXN = 1e2 + ;
  32. const int INF = 0x3f3f3f3f;
  33. const int MOD = 1e9 + ;
  34. struct Cola {
  35. int a, b, c, step;
  36. };
  37. bool vis[MAXN][MAXN];
  38. int A, B, C;
  39. void BFS(void) {
  40. memset (vis, false, sizeof (vis));
  41. queue<Cola> Q; Q.push ((Cola) {, , C, }); vis[][] = true;
  42. while (!Q.empty ()) {
  43. Cola c = Q.front (); Q.pop ();
  44. if ((c.a == c.b && c.a == C / ) || (c.a == c.c && c.a == C / ) || (c.b == c.c && c.b == C / )) {
  45. printf ("%d\n", c.step); return ;
  46. }
  47. if (c.c > ) { //c -> a
  48. int t = min (c.c, A - c.a);
  49. if (!vis[c.a+t][c.b]) {
  50. vis[c.a+t][c.b] = true; Q.push ((Cola) {c.a+t, c.b, c.c-t, c.step + });
  51. }
  52. }
  53. if (c.c > ) { //c -> b
  54. int t = min (c.c, B - c.b);
  55. if (!vis[c.a][c.b+t]) {
  56. vis[c.a][c.b+t] = true; Q.push ((Cola) {c.a, c.b+t, c.c-t, c.step + });
  57. }
  58. }
  59. if (c.a > ) { //a -> c
  60. int t = min (c.a, C - c.c);
  61. if (!vis[c.a-t][c.b]) {
  62. vis[c.a-t][c.b] = true; Q.push ((Cola) {c.a-t, c.b, c.c+t, c.step + });
  63. }
  64. }
  65. if (c.b > ) { //b -> c
  66. int t = min (c.b, C - c.c);
  67. if (!vis[c.a][c.b-t]) {
  68. vis[c.a][c.b-t] = true; Q.push ((Cola) {c.a, c.b-t, c.c+t, c.step + });
  69. }
  70. }
  71. if (c.a > ) { //a -> b
  72. int t = min (c.a, B - c.b);
  73. if (!vis[c.a-t][c.b+t]) {
  74. vis[c.a-t][c.b+t] = true; Q.push ((Cola) {c.a-t, c.b+t, c.c, c.step + });
  75. }
  76. }
  77. if (c.b > ) { //b -> a
  78. int t = min (c.b, A - c.a);
  79. if (!vis[c.a+t][c.b-t]) {
  80. vis[c.a+t][c.b-t] = true; Q.push ((Cola) {c.a+t, c.b-t, c.c, c.step + });
  81. }
  82. }
  83. }
  84. puts ("NO");
  85. }
  86. int main(void) { //HDU 1495 非常可乐
  87. while (scanf ("%d%d%d", &C, &A, &B) == ) {
  88. if (!C && !A && !B) break;
  89. if (C & ) {
  90. puts ("NO"); continue;
  91. }
  92. BFS ();
  93. }
  94. return ;
  95. }

BFS(倒水问题) HDU 1495 非常可乐的更多相关文章

  1. HDU 1495 非常可乐(BFS倒水问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...

  2. HDU 1495 非常可乐【BFS/倒水问题】

    非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  3. HDU 1495 非常可乐(数论,BFS)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. HDU 1495 非常可乐 BFS 搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...

  5. HDU - 1495 非常可乐 【BFS】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1495 思路 首先 如果可乐的体积 是奇数 那么是无解的 然后 如果能够得到两杯 都是一般容量的可乐 那 ...

  6. HDU 1495 非常可乐【BFS】

    题目链接:https://vjudge.net/problem/HDU-1495 转载于:https://www.cnblogs.com/ECJTUACM-873284962/p/6750320.ht ...

  7. HDU 1495 非常可乐 bfs 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 第三个杯子的盛水量可由前两个杯子得到,而前两个杯子状态总数在100*100以内,穷举可实现 #includ ...

  8. (step4.2.5)hdu 1495(非常可乐——BFS)

    题目大意:输入三个整数 a,b,c.   a : 可乐瓶的容量,b: 甲杯的容量 ,c: 乙杯的容量.问能否用这三个被来实现饮料的平分???如果可以输出倒饮料的次数, 否则输出NO 解题思路:BFS ...

  9. HDU 1495 非常可乐 BFS搜索

    题意:有个为三个杯子(杯子没有刻度),体积为s,n,m,s=m+n, 刚开始只有体积为s的杯子装满可乐,可以互相倒,问你最少的次数使可乐均分,如果没有结果,输出-1; 分析:直接互相倒就完了,BFS模 ...

随机推荐

  1. 序列终结者(bzoj 1521)

    Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这 ...

  2. fastcgi与cgi的区别[转载]

    cgi 在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fork一个新进程来运行外部c程序 (或per ...

  3. HTML5调用传感器的资料汇总

    都可以调用:devicetemperature(温度).devicepressure(压力).devicehumidity(湿度).devicelight(光).devicenoise(声音).dev ...

  4. Bad Luck Island-CodeForce(dp)

    链接:http://codeforces.com/problemset/problem/540/D 题目大意: 这个岛上有三种生物   r石头  s剪刀 p布 求最后只剩一种生物的概率 用dp[i][ ...

  5. php-fpm回顾和总结

    时间久了很容易忘,这里做个备份 FastCGI协议php语言的实现,可以高效处理来自web端的动态请求 php-fpm维护一个或者多个php-cgi进程池,处理请求时不需要频繁创建进程 所以比传统的C ...

  6. springboot整体介绍

    1.springboot:快速开发,强大的运维能力.(监控,服务发现,并打) 2.微服务,将一个大系统分解成很多独立的小服务,这些服务能随时发布. 3.2004年第一版spring 1.0,rod j ...

  7. 解决confluence的乱码问题

    使用confluence时发现一些含有中文的页面中,中文都变成了问号. 继续搜索解决方案,发现时数据库中数据的格式不对, 在mysql中输入以下命令:   mysql> show variabl ...

  8. redux 存值 及 取值 的操作

    项目目录 首先,一个基于React + Redux + React-Router的项目目录可以按照我下方的图片来构建: 其中assets目录用于存放项目的静态资源,如css/图片等,src目录则用于存 ...

  9. Java总结之网络

    [网络基础概念] 什么是计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机能够方便的互相传递信息,共享硬件.软件.数据信息等资源 ...

  10. MariaDB ----单表查询

    1>按一定条件查询某字段的数据 (where) ; ( 查询 id > 的数据) #补充: ; 注意“ select * from  students1:  (此命令需谨慎使用, 数据量大 ...