先上题目:

非常可乐

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

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即可,广搜的时候需要记录的是当前的三个杯子的状态,然后判定一下重复就可以了。这里用set保存已经进行扩展了的状态。
上代码:

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <set>
  5 #include <queue>
  6 #include <utility>
  7 #define x first
  8 #define y second
  9 using namespace std;
 10
 11 typedef pair<pair<int,int>,int> piii;
 12 int s,n,m,ti;
 13
 14 set<piii> ss;
 15
 16 bool isok(piii a){
 17     if(a.x.x*2==s && a.x.y*2==s) return 1;
 18     else if(a.x.x*2==s && a.y*2==s) return 1;
 19     else if(a.x.y*2==s && a.y*2==s) return 1;
 20     return 0;
 21 }
 22
 23 inline piii mpiii(int a,int b,int c) { return make_pair( make_pair(a,b) , c ); }
 24
 25 bool check(){
 26     ti=0;
 27     queue<pair<piii,int> > q;
 28     pair<piii,int> tt;
 29     piii u = mpiii(s,0,0);
 30     q.push(make_pair(u,0));
 31     ss.insert(u);
 32     while(!q.empty()){
 33         int tti;
 34         tt = q.front();
 35         q.pop();
 36         u = tt.x;
 37         tti = tt.y;
 38         //s-->n
 39         if(u.x.x>0 && (n-u.x.y)>0){
 40             if(  u.x.x > (n-u.x.y)  ){ u.x.x-=(n-u.x.y); u.x.y=n; }
 41             else{ u.x.y+=u.x.x; u.x.x=0;  }
 42             if(ss.count(u)<=0){
 43                 tti++;
 44                 if(isok(u)){ti=tti; return 1;}
 45                 ss.insert(u);
 46                 q.push( make_pair(u,tti) );
 47             }
 48         }
 49         //s-->m
 50         u = tt.x;
 51         tti = tt.y;
 52         if(u.x.x>0 && (m-u.y)>0){
 53             if(  u.x.x > (m-u.y)  ){ u.x.x-=(m-u.y); u.y=m; }
 54             else{ u.y+=u.x.x; u.x.x=0; }
 55             if(ss.count(u)<=0){
 56                 tti++;
 57                 if(isok(u)){ti=tti; return 1;}
 58                 ss.insert(u);
 59                 q.push( make_pair(u,tti) );
 60             }
 61         }
 62         //n-->s
 63         u = tt.x;
 64         tti = tt.y;
 65         if(u.x.y>0 && (s-u.x.x)>0){
 66             if(  u.x.y > (s-u.x.x)  ){ u.x.y-=(s-u.x.x); u.x.x=s; }
 67             else{ u.x.x+=u.x.y; u.x.y=0; }
 68             if(ss.count(u)<=0){
 69                 tti++;
 70                 if(isok(u)){ti=tti; return 1;}
 71                 ss.insert(u);
 72                 q.push( make_pair(u,tti) );
 73             }
 74         }
 75         //n-->m
 76         u = tt.x;
 77         tti = tt.y;
 78         if(u.x.y>0 && (m-u.y)>0){
 79             if(  u.x.y > (m-u.y)  ){ u.x.y-=(m-u.y); u.y=m; }
 80             else{ u.y+=u.x.y; u.x.y=0;}
 81             if(ss.count(u)<=0){
 82                 tti++;
 83                 if(isok(u)){ti=tti; return 1;}
 84                 ss.insert(u);
 85                 q.push( make_pair(u,tti) );
 86             }
 87         }
 88         //m-->s
 89         u = tt.x;
 90         tti = tt.y;
 91         if(u.y>0 && (s-u.x.x)>0){
 92             if(  u.y > (s-u.x.x)  ){ u.y-=(s-u.x.x); u.x.x=s; }
 93             else{ u.x.x+=u.y; u.y=0; }
 94             if(ss.count(u)<=0){
 95                 tti++;
 96                 if(isok(u)){ti=tti; return 1;}
 97                 ss.insert(u);
 98                 q.push( make_pair(u,tti) );
 99             }
100         }
101         //m-->n
102         u = tt.x;
103         tti = tt.y;
104         if(u.y>0 && (n-u.x.y)>0){
105             if(  u.y > (n-u.x.y)  ){ u.y-=(n-u.x.y); u.x.y=n; }
106             else{ u.x.y+=u.y; u.y=0; }
107             if(ss.count(u)<=0){
108                 tti++;
109                 if(isok(u)){ti=tti; return 1;}
110                 ss.insert(u);
111                 q.push( make_pair(u,tti) );
112             }
113         }
114     }
115     return 0;
116 }
117
118 int main()
119 {
120     //freopen("data.txt","r",stdin);
121     while(scanf("%d %d %d",&s,&n,&m),(s+n+m)){
122         ss.clear();
123         if( (s&1)==0 && check()) printf("%d\n",ti);
124         else printf("NO\n");
125     }
126     return 0;
127 }

1495

转载于:https://www.cnblogs.com/sineatos/p/3847006.html

HDU - 1495 - 非常可乐相关推荐

  1. HDU 1495 非常可乐

    - HDU 1495 - 非常可乐 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和 ...

  2. HDU - 1495 非常可乐(BFS,数学)

    HDU - 1495 非常可乐(BFS,数学) 巨佬的数学解法 #include<iostream> using namespace std; int gcd(int a,int b) { ...

  3. HDU 1495 非常可乐

    非常可乐 http://acm.hdu.edu.cn/showproblem.php?pid=1495 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

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

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

  5. HDU 1495(非常可乐)

    Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且 ...

  6. hdu 1495 非常可乐 (bfs)

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

  7. HDU 1495 非常可乐(BFS||数论)

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

  8. Hdu 1495 非常可乐、BFS、模拟:【题解】

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

  9. hdu 1495 非常可乐(BFS)

    题目链接:hdu1495 共有6种操作,x-->y,x-->z,y-->x,y-->z,z-->x,z-->y #include<stdio.h> #i ...

最新文章

  1. 如何合理使用java异常_如何更合理的利用Java中的异常抛出?
  2. 一款java代码生成器(我受够了加班),走起!
  3. wsl2设置挂载_Windows下的Linux子系统安装,WSL 2下配置docker
  4. list 数据类型的应用场景
  5. 绿盟防火墙配置手册_双链路环境下不同品牌防火墙更换案例分享
  6. 资源放送丨《大规模 SQL 审核设计与实践》PPT视频
  7. 【Excel-2010】空值替换
  8. 因为孤浪的关于爱情...关于婚姻...关于生活... 走进的CTO的第一天
  9. layer根据内容动态改变窗口高度
  10. java IO流详解及特性
  11. 简单示例用例(Simple Example Use Cases)--hive GettingStarted用例翻译
  12. ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、
  13. 13、TCP Socket与UDP Socket
  14. thinkpad x250装黑苹果教程_GitHub - siweijianrong/Hackintosh: Hackintosh黑苹果长期维护机型EFI及安装教程整理...
  15. 如何求复数的模用计算机,复数计算器(复数运算工具)
  16. linux cpufreq 设置
  17. 年底大标季来袭,一步之遥2.0投标培训班助你实力升级!
  18. 简述使用混合传递参数时的基本原则_过程控制系统与仪表习题答案 -
  19. AD19 编译报错:has only one pin 和 floating net label
  20. 旅行+社交APP功能需求分析

热门文章

  1. 译文 | 与TensorFlow的第一次接触 第五章:多层神经网络
  2. 算法移植优化(六)tensorflow模型移植推理优化
  3. 最全面超大规模数据集下载链接汇总(转)
  4. 黑苹果睡眠重启后死机_iPhone卡屏、死机、黑屏?| 学会这招,秒解!
  5. cmu的计算机专业项目有哪些,CMU卡耐基梅隆大学计算机学院项目介绍(一)
  6. MYSQL8 关键字(官方)
  7. 使用Python音频双通道分离
  8. $(document).ready和window.onload的区别
  9. BNU44583——Star Trek: First Contact——————【01背包】
  10. 基于插件架构的简单的Winform框架(下)