题目链接

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

题意:

容量分别是N 毫升和M 毫升,可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。能平分的话请输出最少要倒的次数,否则输出"NO"。

分析:

广搜,每一个队头元素都要进行6次操作,如图进行了n->m一次操作:

对应的6中操作(S->N,S->M,N->S,N->M,M->S,M->N)

此图必须注意:n,m的意思为:瓶子n中此刻存在的可乐量为n,瓶子m中此刻存在的可乐量为m

注意:从一个瓶倒进另一个瓶时必须分两种情况,1:能装满2:不能装满

代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std; struct node
{
int x[3];
int len;
}; queue<node>q; int map[101][101][101];//记录三个状态是否出现过 int dx[3];//三个容器分别最多可以装多少水
double isok; int bfs(int x,int y,int z,int xx)
{
memset(map,0,sizeof(map));
while(!q.empty())
{
q.pop();
}
node p;
p.x[0]=x;
p.x[1]=y;
p.x[2]=z;
p.len=0;
q.push(p);
while(!q.empty())
{
node p=q.front();
q.pop();
if((p.x[0]==p.x[1]&&p.x[1]==xx)||(p.x[0]==p.x[2]&&p.x[0]==xx)||(p.x[1]==p.x[2]&&p.x[1]==xx))
{
return p.len;
}
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
if(i==j)continue;
node p1;
if(p.x[i]<=dx[j]-p.x[j])//第j个杯子是否可以装下p.x[i]的水
{
p1.x[j]=p.x[j]+p.x[i];
p1.x[i]=0;
}
else//不能倒下p.x[i]的水。则倒一部分进去
{
p1.x[i]=p.x[i]-(dx[j]-p.x[j]);
p1.x[j]=dx[j];
}
for(int k=0; k<3; k++)
{
if(k!=i&&k!=j)
{
p1.x[k]=p.x[k];
}
}
p1.len=p.len;
if(map[p1.x[0]][p1.x[1]][p1.x[2]]==1)
continue;
map[p1.x[0]][p1.x[1]][p1.x[2]]=1;
p1.len++;
q.push(p1);
}
}
}
return -1;
} int main()
{
int s,n,m;
while(~scanf("%d%d%d",&s,&n,&m))
{
if(s==0&&n==0&&m==0)break;
if(s%2)//可乐总体积是奇数的话,肯定是不能够平分的
{
printf("NO\n");
}
else
{
dx[0]=s,dx[1]=n,dx[2]=m;
int re=bfs(s,0,0,s/2);
if(re==-1)
printf("NO\n");
else
printf("%d\n",re);
}
}
return 0;
}

hdu 1495 非常可乐 (广搜)的更多相关文章

  1. hdu 1495 非常可乐 广搜

    #include<iostream> #include<cstdio> #include<cstring> #include<queue> ][][]; ...

  2. HDU ACM 1495 非常可乐(广搜BFS)

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

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

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

  4. HDU 1495 非常可乐 (只是转了个弯的广搜题)

    N - 非常可乐 =========================================================================================== ...

  5. HDU 1495 非常可乐 BFS

    题目大意:中文题不说了. 题目思路:我有同学用GCD数论写出来的代码很简洁,但是很抱歉,数论蒟蒻,我觉得比赛的时候我没办法推出.如果用BFS的话思路很简单的,就是6方向广搜,只不过稍微麻烦点.具体看代 ...

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

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

  7. HDU 1495 非常可乐

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103711#problem/M /*BFS简单题 链接地址: http://acm.hdu ...

  8. HDU 1495 非常可乐 BFS 搜索

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

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

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

随机推荐

  1. selenium使用execl实现数据驱动测试

    import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.uti ...

  2. C++ 查看预处理后的源文件(查看真实代码)

    gcc -E filename.cpp 会生成 filename.cpp 的预处理文件,这样就能看到宏展开后的代码,用于理解和调试宏非常有帮助.   http://www.qtdebug.com/cp ...

  3. Boa服务器移植

    Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右.作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求.但Boa支持CGI,能够为C ...

  4. SSL证书部署

    SSL证书部署指南 https://www.trustauth.cn/ssl-guide

  5. JS调用App方法及App调用JS方法

    做App内嵌H5项目时,经常会遇到js与App的交互,最普遍的就是方法的互相调用,那么如何实现方法的互相调用呢? 写在前面: 如果只是小项目且后期扩大的可能性不大的时候,可以忽略,可如果是长期项目的话 ...

  6. MySQL 双主问题集

    最近试用MySQL高可用方案,需要配MySQL双主,对期间遇到的问题做下记录. 1.导出锁表问题 mysqldump 命令增加参数 --skip-opt -q 可避免导出时锁表: 2.导出\导入所有数 ...

  7. Concise and clear CodeForces - 991F(dfs 有重复元素的全排列)

    就是有重复元素的全排列 #include <bits/stdc++.h> #define mem(a, b) memset(a, b, sizeof(a)) using namespace ...

  8. [BZOJ3712]Fiolki 重构树(并查集)

    3712: [PA2014]Fiolki Time Limit: 30 Sec  Memory Limit: 128 MB Description 化学家吉丽想要配置一种神奇的药水来拯救世界.吉丽有n ...

  9. 虚拟主机、ECS云服务器、VPS区别汇总

    想做一个网站,但是在各种类型的服务器琳琅满目,现在总结一下市场上常见的几种服务器. 1.虚拟主机 虚拟主机就是利用虚拟化的技术,将一台服务器划分出一定大小的空间,每个空间都给予单独的 FTP 权限和 ...

  10. 【Cf #449 C】Willem, Chtholly and Seniorious(set维护线段)

    这里介绍以个小$trick$,民间流传为$Old Driver Tree$,实质上就是$set$维护线段. 我们将所有连续一段权值相同的序列合并成一条线段,扔到$set$里去,于是$set$里的所有线 ...