非常可乐

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

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
 
Author
seeyou
 
题解:奇数的除外,总共六种倒法,a->b a->c b->a b->c c->a c->b.三种状态,仔细一点模拟就可以做出来了。
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <stdlib.h>
using namespace std; struct Node{
int x,y,z,step;
};
int a,b,c;
bool vis[][][];
int bfs(){
memset(vis,false,sizeof(vis));
queue<Node> q;
Node s;
s.x = a,s.y = ,s.z = ,s.step = ;
vis[a][][]=true;
q.push(s);
while(!q.empty()){
Node now = q.front();
q.pop();
if(now.x==a/&&now.y==a/||now.x==a/&&now.z==a/||now.y==a/&&now.z==a/){
return now.step;
}
Node next;
if(now.x!=){ /// a -> b
if(now.x>b-now.y){ ///还可以倒满b
next.x =now.x-(b-now.y);
next.y = b;
next.z = now.z;
}else{
next.x = ;
next.y =now.x+now.y;
next.z = now.z;
}
next.step=now.step+;
if(!vis[next.x][next.y][next.z]){
vis[next.x][next.y][next.z] = true;
q.push(next);
}
}
if(now.x!=){ ///a->c
if(now.x>c-now.z){
next.x = now.x - (c-now.z);
next.y = now.y;
next.z = c;
}else{
next.x = ;
next.y = now.y;
next.z =now.z+now.x;
}
next.step=now.step+;
if(!vis[next.x][next.y][next.z]){
vis[next.x][next.y][next.z] = true;
q.push(next);
}
}
if(now.y!=){ ///b->a
if(now.y>a-now.x){
next.x = a;
next.y = now.y - (a-now.x);
next.z = now.z;
}else{
next.x = now.x+now.y;
next.y = ;
next.z =now.z;
}
next.step=now.step+;
if(!vis[next.x][next.y][next.z]){
vis[next.x][next.y][next.z] = true;
q.push(next);
}
}
if(now.y!=){ ///b->c
if(now.y>c-now.z){
next.x = now.x;
next.y = now.y - (c-now.z);
next.z = c;
}else{
next.x = now.x;
next.y = ;
next.z =now.z+now.y;
}
next.step=now.step+;
if(!vis[next.x][next.y][next.z]){
vis[next.x][next.y][next.z] = true;
q.push(next);
}
}
if(now.z!=){ ///c->a
if(now.z>a-now.x){
next.x = a;
next.y = now.y;
next.z = now.z - (a-now.x);
}else{
next.x = now.x+now.z;
next.y = now.y;
next.z = ;
}
next.step=now.step+;
if(!vis[next.x][next.y][next.z]){
vis[next.x][next.y][next.z] = true;
q.push(next);
}
}
if(now.z!=){ ///c->b
if(now.z>b-now.y){
next.x = now.x;
next.y = b;
next.z = now.z - (b-now.y);
}else{
next.x = now.x;
next.y = now.y+now.z;
next.z = ;
}
next.step=now.step+;
if(!vis[next.x][next.y][next.z]){
vis[next.x][next.y][next.z] = true;
q.push(next);
}
}
}
return -;
}
int main(){
while(scanf("%d%d%d",&a,&b,&c)!=EOF,a+b+c){
if(a%==){
printf("NO\n");
continue;
}
int ans = bfs();
if(ans==-){
printf("NO\n");
}else{
printf("%d\n",ans);
}
}
}

hdu 1495(BFS)的更多相关文章

  1. HDU - 1495 bfs [kuangbin带你飞]专题一

    模拟倒水的过程,每次可以把第i个杯子的水向第j个杯子里面倒,这可能出现新的状态,不停的更新状态,指导某两个杯子的水等于S/2说明找到答案,如果所有状态搜索完毕仍然不能均分,则退出. 注意:如果S是奇数 ...

  2. 【BFS】HDU 1495

    直达–> HDU 1495 非常可乐 相似题联动–>POJ 3414 Pots 题意:中文题,不解释. 思路:三个杯子倒来倒去,最后能让其中两个平分即可.可能性六种.判定的时候注意第三个杯 ...

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

    题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...

  4. hdu 4531 bfs(略难)

    题目链接:点我 第一次不太清楚怎么判重,现在懂了,等下次再做 /* *HDU 4531 *BFS *注意判重 */ #include <stdio.h> #include <stri ...

  5. HDU 1495 非常可乐 BFS 搜索

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

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

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

  7. 非常可乐---hdu 1495(BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意: 有3个杯子a b c:a=b+c:然后刚开始时只有a是满的,其它为空的,然后a b c三个之间互相 ...

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

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

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

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

随机推荐

  1. android源码了解dex加载流程

    源码版本:4.4.4_r1 http://www.cnblogs.com/lanrenxinxin/p/4712224.html http://wangzhixian.org/Others/DexCl ...

  2. ExtJs在页面上window再调用Window的事件处理

    今天在开发Ext的过程中遇到了一个恶心的问题,就是在ext.window页面,点击再次弹出window时,gridpanel中的store数据加载异常,不能正常被加载,会出现缓存,出现该问题,是因为w ...

  3. All you need to know about sorting in Postgres

    按:之前看pg的执行计划,多次看到不同的排序方式,但不知何意.偶遇此篇讲解pg执行计划三种排序方式,备忘一下. Sorting Sorting is one of the most fundament ...

  4. Codeforces Round #311 (Div. 2)B. Pasha and Tea二分

    B. Pasha and Tea time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. [lottery anayliser]lottery anayliser

    抓取网页,获得获奖信息 #!/usr/bin/python import urllib2 import re import time def spider(url): ""&quo ...

  6. bzoj 4723 [POI2017]Flappy Bird 模拟

    [POI2017]Flappy Bird Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 482  Solved: 196[Submit][Status ...

  7. centos上tensorflow一键安装脚本

    鉴于tensorflow在centos上安装相当麻烦,特地制作了一个脚本方便以后移植到其它机器上,脚本含有其它python常用包: #! /bin/bash   sudo yum install -y ...

  8. emqtt新版升级一些事项和操作

    注解 Erlang/OTP R19依赖lksctp-tools库 yum install lksctp-tools 控制台地址: http://127.0.0.1:18083,默认用户: admin, ...

  9. LightOJ 1062 - Crossed Ladders 基础计算几何

    http://www.lightoj.com/volume_showproblem.php?problem=1062 题意:问两条平行边间的距离,给出从同一水平面出发的两条相交线段长,及它们交点到水平 ...

  10. cookie与session的区别与应用

    通常我们所说的浏览器自动保存密码,下次不用登陆,提示一次就不再出现的内容,大部分通过cookie或者session来实现的. cookie的概念 cookie是浏览器(User Agent)访问一些网 ...