Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

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,模拟倒水,(相当于枚举)
 
 #include<cstdio>
#include<string.h>
using namespace std;
int s,n,m,pre[][],ans[];
int vis[][];
int ans1;
void bfs()
{
int first=,end=,a,b,c;
pre[end][]=s;
pre[end][]=;
pre[end++][]=;
vis[s][]=;
while(first<end)
{
a=pre[first][];
b=pre[first][];
c=pre[first][];
if((a==b&&c==)||(a==c&&b==)||(b==c&&a==))
{
ans1 =ans[first];
return;
}
int a1,b1,c1;
if(a+b>=n)
{
a1=a+b-n;
b1=n;
c1=c;
}
else{
b1=a+b;
a1=;
c1=c;
}
if(vis[a1][b1]==)
{
vis[a1][b1]=;
pre[end][]=a1;
pre[end][]=b1;
pre[end][]=c1;
ans[end++]=ans[first]+;
}
if(a+c>=m)
{
a1=a+c-m;
c1=m;
b1=b;
}
else{
c1=a+c;
a1=;
b1=b;
}
if(vis[a1][b1]==)
{
vis[a1][b1]=;
pre[end][]=a1;
pre[end][]=b1;
pre[end][]=c1;
ans[end++]=ans[first]+;
}
if(b+a>=s)
{
a1=s;
b1=;
c1=c;
}
else{
a1=a+b;
b1=;
c1=c;
}
if(vis[a1][b1]==)
{
vis[a1][b1]=;
pre[end][]=a1;
pre[end][]=b1;
pre[end][]=c1;
ans[end++]=ans[first]+;
}
if(b+c>=m)
{
b1=b+c-m;
c1=m;
a1=a;
}
else{
c1=b+c;
b1=;
a1=a;
}
if(vis[a1][b1]==)
{
vis[a1][b1]=;
pre[end][]=a1;
pre[end][]=b1;
pre[end][]=c1;
ans[end++]=ans[first]+;
}
if(c+a>=s)
{
a1=s;
c1=;
b1=b;
}
else{
a1=a+c;
c1=;
b1=b;
}
if(vis[a1][b1]==)
{
vis[a1][b1]=;
pre[end][]=a1;
pre[end][]=b1;
pre[end][]=c1;
ans[end++]=ans[first]+;
}
if(c+b>=n)
{
c1=c+b-n;
b1=n;
a1=a;
}
else{
b1=b+c;
c1=;
a1=a;
}
if(vis[a1][b1]==)
{
vis[a1][b1]=;
pre[end][]=a1;
pre[end][]=b1;
pre[end][]=c1;
ans[end++]=ans[first]+;
}
first++;
} }
int main()
{
while(scanf("%d %d %d",&s,&n,&m)&&(s+n+m))
{
if(s%)
{
printf("NO\n");
continue;
}
ans1=;
memset(vis,,sizeof(vis));
bfs();
if(ans1) printf("%d\n",ans1);
else printf("NO\n");
}
return ;
}

G - 非常可乐的更多相关文章

  1. Storyboards Tutorial 03

    这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...

  2. 文件图标SVG

    ​<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ...

  3. [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)

    在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...

  4. CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)

    ---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update....   yum install 或者 添加y ...

  5. Linux deepin 下sublimes配置g++ openGL

    参考 :http://blog.csdn.net/u010129448/article/details/47754623 ubuntu 下gnome只要将代码中deepin-terminal改为gno ...

  6. [翻译svg教程]svg 中的g元素

    svg 中的<g>元素用来组织svg元素.如果一组svg元素被g元素包裹了,你可以通过对g元素进行变换(transform),被g元素包裹的元素也将被变换,就好这些被svg包裹的元素是一个 ...

  7. 软件工程:黄金G点小游戏1.0

    我们要做的是黄金G点小游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...

  8. 2016huasacm暑假集训训练五 G - 湫湫系列故事——减肥记I

    题目链接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/G 这是一个01背包的模板题 AC代码: #include<stdio.h&g ...

  9. 毫秒级的时间处理上G的图片(生成缩略图)

    测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = new Stopwatch(); sw1.Start(); //TODO...... sw1.Stop(); stri ...

随机推荐

  1. AndroidTouch事件总结

    1.自定义的控件几乎都要用到触摸事件,不交互怎么响应,相关的事件处理函数由dispatchTouchEvent.onInterceptTouchEvent.onTouchEvent,处理这些事件的由v ...

  2. A 标签的背景

     a {  -webkit-tap-highlight-color: transparent;  -webkit-touch-callout: none;  -webkit-user-select:  ...

  3. HDU 3033 分组背包变形(每种至少一个)

    I love sneakers! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. nRF24L01芯片控制——迈向无线的第一步

    nRF24L01芯片是一款专供单片机的射频收发芯片.工作于2.4GHz~2.5GHz ISM频段.融合了shockburst技术. 我先列出该芯片的硬件参数资料: 至于每个引脚的具体用途,可以参见技术 ...

  5. JavaScript中的作用域

    很多(JavaScript)开发者都在讨论"作用域",但它是什么?它们在JavaScript中的任何地方!我发现很多年轻的开发者不知道作用域是什么.他们中大多数人可以用jQuery ...

  6. spring事务详解(转载+高亮)

    spring提供的事务管理可以分为两类:编程式的和声明式的.编程式的,比较灵活,但是代码量大,存在重复的代码比较多:声明式的比编程式的更灵活.编程式主要使用transactionTemplate.省略 ...

  7. C# 写的一个生成随机汉语名字的小程序

    最近因为要做数据库相关的测试,频繁使用到测试数据,手动添加太过于麻烦,而且复用性太差,因此干脆花了点时间写了一个生成随机姓名和相关数据的类,贴在这里,有需用的同志们可以参考一下.代码本身质量不好,也不 ...

  8. Titanium studio介绍

    1.Titanium Studio 概述 TitaniumStudio是Appcelerator公司开发的一款基于Eclipse的,使开发者利用Javascript来快速开发移动应用程序的跨平台的集成 ...

  9. [转]as3 算法实例【输出1 到最大的N 位数 题目:输入数字n,按顺序输出从1 最大的n 位10 进制数。比如输入3,则输出1、2、3 一直到最大的3 位数即999。】

    思路:如果我们在数字前面补0的话,就会发现n位所有10进制数其实就是n个从0到9的全排列.也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的10进制数. /** *ch 存放数字 *n n ...

  10. 【转】Linux Top 命令解析 比较详细

    TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况.   TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户 ...