HDOJ--1495--非常可乐(隐式图)
来源:互联网 发布:c语言数字字符怎么表示 编辑:程序博客网 时间:2024/05/20 19:15
非常可乐
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7996 Accepted Submission(s): 3195
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 34 1 30 0 0
Sample Output
NO3
思路:这道题跟NYOJ上的三个水杯那道题是很像的.都是隐式图,需要自己构图,然后利用三重for循环便利所有的情况。第一次到达到那种状况的情况下肯定就是最少的次数。
ac代码:
#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;struct node{int V[4],time; };int a[4],vis[110][110],adv;int jud(node temp){//用来判断是否满足题目中的跳出条件。 int a=temp.V[0],b=temp.V[1],c=temp.V[2];if(a==adv&&b==adv)return 1;if(a==adv&&c==adv)return 1;if(b==adv&&c==adv)return 1;return 0; }void bfs(){//对自己所构造的隐式图进行深搜。 memset(vis,0,sizeof(vis));node now,next;queue<node>q;now.V[0]=a[0];now.V[1]=0;now.V[2]=0;now.time=0;vis[a[0]][0]=1;//标记已经出现过的情况。 q.push(now);while(!q.empty()){now=q.front();q.pop();for(int i=0;i<3;i++){//双重for循环遍历所有的情况; for(int j=0;j<3;j++)if(i!=j){next=now;if(now.V[i]+now.V[j]>a[j]){next.V[i]=now.V[i]+now.V[j]-a[j];next.V[j]=a[j];next.time++;}else{next.V[i]=0;next.V[j]=now.V[i]+now.V[j];next.time++;}if(!vis[next.V[0]][next.V[1]]){vis[next.V[0]][next.V[1]]=1;q.push(next);if(jud(next)){printf("%d\n",next.time);return ;}}}}}printf("NO\n");} int main(){while(scanf("%d%d%d",&a[0],&a[1],&a[2]),(a[0]||a[1]||a[2])){adv=a[0]/2;if(a[0]%2){//题目中的意思是平分,那么如果是奇数就肯定不能平分了。 printf("NO\n");continue ;}elsebfs();}return 0;}
0 0
- HDOJ 1495 非常可乐 (BFS隐式图)
- hdoj--1495--非常可乐(搜索+隐式图)
- HDOJ--1495--非常可乐(隐式图)
- HDOJ 1495 非常可乐
- hdoj 1495 非常可乐
- HDOJ 1495 非常可乐 (bfs)
- HDOJ 题目1495 非常可乐(BFS)
- hdoj 非常可乐 1495 (BFS)
- HDOJ 1495 非常可乐 (BFS 模拟)
- HDOJ 1495 非常可乐 【BFS】
- hdoj 1495 非常可乐 【BFS】
- HDOJ 非常可乐 1495【BFS】
- HDOJ 1495 非常可乐 【bfs】
- hdoj 1495 【非常可乐】【GCD】
- HDOJ 1495 非常可乐(bfs)
- hdoj 1495 非常可乐 【bfs】
- hdoj 1495 (bfs())(非常可乐)
- hdoj 1495 非常可乐 【bfs(互相倒水)】
- FragmentTransaction的replace()方法和add()方法
- android学习之Activity的生命周期
- C++链表的分类排序
- 关于权限的通用设计
- oracle复制表
- HDOJ--1495--非常可乐(隐式图)
- T检验与F检验的区别(通俗理解)
- Virtualbox WDDM 用户模式显示驱动之vboxWddmDispGetCaps
- 运用SEL,运行时改变两个方法的实现
- C# 微信企业号--管理素材文件
- JavaScript中类和构造函数的理解
- mac 系统office软件
- LeetCode---Path Sum II
- 如何获取清单文件AndroidManifest中meta_data元素的信息