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. uploadify参数

    $(document).ready(function() { $("#file_upload").uploadify({ //开启调试 'debug' : false, //是否自 ...

  2. String字符串类课后作业

    String动手动脑和课后作业 请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 结果: 总结:在Java中,内容相同的字串常量(&quo ...

  3. 转别人的 STM32外部中断使用注意事项

    前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark. 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 ST ...

  4. 第一篇:Retrofit主要类UML图

    2016-05-06 16:07:09 1.先上一张Retrofit的代码结构图: 可以看到,Retrofit自身的结构很简单,代码量也不是很大.红色框部分是一些注解类,就是一些标记. 简单的看一下客 ...

  5. php 字符串转数组

    $str = "你好吗"; function str($str) {     $length = mb_strlen($str);     for ($i=0; $i<$le ...

  6. JavaScript—赋值表达式

      赋值表达式的运算顺序是从右到左的,因此,可以通过以下方法对多个变量赋值 1 i=j=k=0;//也就是把三个变量初始化为0 赋值表达式中的递增和递减 n++和++n的区别:     简单来说,根据 ...

  7. 跨域资源共享(CORS)问题解决方案

    CORS:Cross-Origin Resource Sharing(跨域资源共享) CORS被浏览器支持的版本情况如下:Chrome 3+.IE 8+.Firefox 3.5+.Opera 12+. ...

  8. android工程中menu的使用总结

    android的Menu使用 转自:thinkYeah的博客 1.普通的Menu 先来看看最简单的Menu怎样实现. 在主Activity中覆盖onCreateOptionsMenu(Menu men ...

  9. 去除 UINavigationController.navigationBar下方的横线

    self.navigationController.navigationBar.clipsToBounds=YES;

  10. Oracle开窗函数 over()(转)

    copy文链接:http://blog.csdn.net/yjjm1990/article/details/7524167#,http://www.2cto.com/database/201402/2 ...