Description

  大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享 这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出"NO"。
 
  直接BFS就好,100*100*100种状态,还是不会超。。。。。。(还有更好的方法吗?)
 
代码如下:
#include<iostream>
#include<cstring> using namespace std; int que[],las,fir;
int A,B,C;
long long vis[][][]; bool judge(int x,int y,int z)
{
if(vis[x][y][z]==-)
return ;
return ;
} long long slove()
{
int temp,t1,t2,t3;
int base; las=fir=;
memset(vis,-,sizeof(vis)); que[las++]=A**+*+;
vis[A][][]=; while(las-fir)
{
temp=que[fir++]; t1=temp/(*);
t2=(temp/)%;
t3=temp%;
base=vis[t1][t2][t3];
if((t1==A/&&(t2==A/||t3==A/))||(t2==A/&&t3==A/))
return base; temp=min(t1,B-t2);
t1-=temp;
t2+=temp;
if(judge(t1,t2,t3))
{
vis[t1][t2][t3]=base+;
que[las++]=t1*(*)+t2*+t3;
}
t1+=temp;
t2-=temp; temp=min(t1,C-t3);
t1-=temp;
t3+=temp;
if(judge(t1,t2,t3))
{
vis[t1][t2][t3]=base+;
que[las++]=t1*(*)+t2*+t3;
}
t1+=temp;
t3-=temp; temp=min(t2,A-t1);
t2-=temp;
t1+=temp;
if(judge(t1,t2,t3))
{
vis[t1][t2][t3]=base+;
que[las++]=t1*(*)+t2*+t3;
}
t2+=temp;
t1-=temp; temp=min(t2,C-t3);
t2-=temp;
t3+=temp;
if(judge(t1,t2,t3))
{
vis[t1][t2][t3]=base+;
que[las++]=t1*(*)+t2*+t3;
}
t2+=temp;
t3-=temp; temp=min(t3,A-t1);
t3-=temp;
t1+=temp;
if(judge(t1,t2,t3))
{
vis[t1][t2][t3]=base+;
que[las++]=t1*(*)+t2*+t3;
}
t3+=temp;
t1-=temp; temp=min(t3,B-t2);
t3-=temp;
t2+=temp;
if(judge(t1,t2,t3))
{
vis[t1][t2][t3]=base+;
que[las++]=t1*(*)+t2*+t3;
}
t3+=temp;
t2-=temp;
} return -;
} int main()
{
ios::sync_with_stdio(false); long long ans; for(cin>>A>>B>>C;A+B+C;cin>>A>>B>>C)
{
if(A%)
ans=-;
else
ans=slove(); if(ans!=-)
cout<<ans<<endl;
else
cout<<"NO\n";
} return ;
}

最新文章

  1. 编译器开发系列--Ocelot语言1.抽象语法树
  2. 父元素相对定位后,子元素在ie下被覆盖的问题!
  3. jquery1.9以上版本如何使用toggle函数
  4. 10g 11g配置Logical Standby
  5. mysql 1130 ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server
  6. Fedora20 编译安装qemu-system
  7. HDU 4932 贪心
  8. 用19种编程语言写Hello World
  9. 安装hadoop2.6.0伪分布式环境
  10. 如何在编译内核时添加缺少的固件(随着intel wireless 5100 AGN的 iwlwifi 案例)
  11. mfc对话框不能响应键盘消息
  12. Effective C++ 24,25
  13. dedecms 获取描述信息限制字数
  14. Android规范发展
  15. 201521123015 《Java程序设计》第9周学习总结
  16. Tomcat中的Connector配置
  17. Laravel 自定义分页、可以调整、显示数目
  18. redmine增加文本输入框默认格式
  19. Linux 网络命令找不到
  20. maven添加本地jar到本地库中

热门文章

  1. HTML-中&lt;li&gt;标签value值的兼容问题
  2. 使用POI生成Excel文件,可以自动调整excel列宽
  3. linux的学习系列 9--网络通信
  4. iOS拨打电话(三种方法)
  5. [转]程序开发基础学习二(C++ Google Style 命名规则)
  6. 使用libvirt做适配的kvm虚拟机window server 2008 磁盘性能的提升
  7. android 去掉listview之间的黑线
  8. asp读取指定目录下的文件名
  9. compileSdkVersion,buildToolsVersion还有targetSdkVersion要一致,从而避免build的时候报错
  10. css预处理器