非常可乐

大家一定觉的运动以后喝可乐是一件很惬意的事情,但是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

 

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 105
#define true 1
#define false 0
#define overflow -2
int s,n,m;
bool vis[MAX][MAX][MAX];struct point
{int s,n,m;int step;
};int bfs()
{if(s%2==1)return overflow;int s2=s/2;queue<point>q;struct point t;t.s=s;t.n=0;t.m=0;t.step=0;q.push(t);vis[s][0][0]=false;while(!q.empty()){t=q.front();//cout<<t.s<<" "<<t.n<<" "<<t.m<<" "<<t.step<<endl;if((t.s==t.n&&t.s==s2)||(t.s==t.m&&t.s==s2)||(t.n==t.m&&t.n==s2)){return t.step;}q.pop();struct point w;if(t.s&&n-t.n>0){if(t.s>n-t.n){w.s=t.s-(n-t.n);w.n=n;w.m=t.m;}else{w.s=0;w.n=t.n+t.s;w.m=t.m;}if(vis[w.s][w.n][w.m]){vis[w.s][w.n][w.m]=false;w.step=t.step+1;q.push(w);}}if(t.s&&m-t.m>0){if(t.s>m-t.m){w.s=t.s-(m-t.m);w.m=m;w.n=t.n;}else{w.s=0;w.m=t.m+t.s;w.n=t.n;}if(vis[w.s][w.n][w.m]){vis[w.s][w.n][w.m]=false;w.step=t.step+1;q.push(w);}}if(t.n&&s-t.s>0){if(t.n>s-t.s){w.n=t.n-(s-t.s);w.s=s;w.m=t.m;}else{w.n=0;w.s=t.n+t.s;w.m=t.m;}if(vis[w.s][w.n][w.m]){vis[w.s][w.n][w.m]=false;w.step=t.step+1;q.push(w);}}if(t.n&&m-t.m>0){if(t.n>m-t.m){w.n=t.n-(m-t.m);w.m=m;w.s=t.s;}else{w.n=0;w.m=t.n+t.m;w.s=t.s;}if(vis[w.s][w.n][w.m]){vis[w.s][w.n][w.m]=false;w.step=t.step+1;q.push(w);}}if(t.m&&s-t.s>0){if(t.m>s-t.s){w.m=t.m-(s-t.s);w.s=s;w.n=t.n;}else{w.m=0;w.s=t.m+t.s;w.n=t.n;}if(vis[w.s][w.n][w.m]){vis[w.s][w.n][w.m]=false;w.step=t.step+1;q.push(w);}}if(t.m&&n-t.n>0){if(t.m>n-t.n){w.m=t.m-(n-t.n);w.n=n;w.s=t.s;}else{w.m=0;w.n=t.n+t.m;w.s=t.s;}if(vis[w.s][w.n][w.m]){vis[w.s][w.n][w.m]=false;w.step=t.step+1;q.push(w);}}}return -1; 
}int main()
{while(scanf("%d%d%d",&s,&n,&m)){if(s==0&&n==0&&m==0)break;memset(vis,true,sizeof(vis));int c=bfs();if(c<0)cout<<"NO"<<endl;else cout<<c<<endl;}
}

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

历届试题 蚂蚁感冒

问题描述 长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左&#xff0c;有的朝右。   每只蚂蚁都只能沿着杆子向前爬&#xff0c;速度是1厘米/秒。   当两只蚂蚁碰面时&#xff0c;它们会同时掉头往相反的方向爬行。   这些蚂蚁中&#xff0c;有1只蚂蚁感冒了。并且在…

小学生测验

关于这段代码&#xff1a; 数据存放在一个叫data的文件中增加了结构体排序&#xff0c;对小学生们的成绩排名其他要求如同题干大一时写的版本&#xff0c;没文件读写&#xff0c;大三时写的在下面。 项目一 小学生测验 16学时 问题描述&#xff1a;面向小学1~2年级学…

算法训练 和为T 深度搜索

问题描述 从一个大小为n的整数集中选取一些元素&#xff0c;使得它们的和等于给定的值T。每个元素限选一次&#xff0c;不能一个都不选。 输入格式 第一行一个正整数n&#xff0c;表示整数集内元素的个数。   第二行n个整数&#xff0c;用空格隔开。   第三行一个整数T&am…

算法训练 瓷砖铺放 递归

问题描述 有一长度为N(1<&#xff2e;<10)的地板&#xff0c;给定两种不同瓷砖&#xff1a;一种长度为1&#xff0c;另一种长度为2&#xff0c;数目不限。要将这个长度为N的地板铺满&#xff0c;一共有多少种不同的铺法&#xff1f;   例如&#xff0c;长度为4的地面一…

链表应用 多项式相加

用链表实现多项式相加 #include<iostream> #include<cstdio> #include<malloc.h> #define flag -1 using namespace std; typedef struct Node {float coef;int expn;struct Node *next; }LNode,*LinkList;void CreatLinkList(LinkList L) {LNode *r,*s;fl…

KMP算法 串模式识别 用nextval[j]改进next[j]

用nextval[]改进next[] 还有&#xff0c;代码真美&#xff0c;看了好久 #include<stdio.h> #define MAXSIZE 100 #include<iostream> using namespace std;typedef struct {char data[MAXSIZE];int length; }SqString;void StrAssign(SqString &s,char cstr[]…

vi(vim)编辑器 学习笔记

vi是非图形化的编辑器 vim是vi的加强版。 三种使用模式 一般模式用户可以进行光标的移动&#xff0c;删除字符以及复制 编辑模式下&#xff0c;用户可以插入或者删除字符 命令模式下&#xff0c;可以保存文件或者退出编辑器 移动操作 向下移动光标&#xff1a;下箭头&#…

动态数组vector的使用_简单代码示例

简单代码示例 //动态数组vector的使用 #include <iostream> #include <vector> //用 <vector>头文件 using namespace std; int main() {vector<int> a; //新建一个int型数组a[] a.push_back(0); //数组末尾插入0 a.push_back(1); …

二维数组vector的代码使用简单例子_vector容器_ 用构造函数vectorint()

二维数组vector 用构造函数vector<int>() #include <iostream> #include<vector> using namespace std;int main() {vector<vector<int> > v2d;//开一个vector用来存放vector类型的容器&#xff0c;用空格区分> >和>> for(int i0;…

素筛打表(输出小于n最大素数)

今天有一个小学弟问我洛谷一个很基础的题目&#xff0c;顺便重新温习了一下素筛&#xff0c;网上别人的代码风格真的不习惯。 #include<iostream> using namespace std; const int MAX100000; bool is_prime[MAX];int main() {int n;cin>>n;for(int i2;i<n;i)i…

淮北师范18-19计算机科学与技术大类实验课试卷

1、编写一个C程序&#xff0c;输入一个正整数&#xff0c;判断其是否为素数 #include<iostream> using namespace std; const int MAX100000; bool is_prime[MAX];int main() {int n;cin>>n;for(int i2;i<n;i)is_prime[i]1;for(int i2;i*i<n;i){if(is_prime…

win10台式机一根网线连接笔记本wifi网络

我的笔记本和台式机都是win10&#xff0c;笔记本通过家里的路由器连的无线网&#xff0c;台式机没法连接无线&#xff0c;还有一条网线 笔记本打开网络适配器 右键属性 勾选共享里面的 允许其他网络用户通过此计算机的internet连接来连接 家庭网络选择笔记本和台式机之间的局…

蓝桥杯单片机stc15f2k61s2矩阵按键中断扫描代码

使用中断函数进行矩阵按键的扫描&#xff0c;在《手把手教你学51单片机》上面的代码修改了一下。感觉这个代码写的比较好。 #include<stc15f2k60s2.h>#define uchar unsigned charsbit KEY_IN_1 P4^4; sbit KEY_IN_2 P4^2; sbit KEY_IN_3 P3^5; sbit KEY_IN_4 P3^4; …

蓝桥杯单片机DS1302时钟芯片驱动代码注释

蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线),SCLK (串行时钟).*/#include<STC15F2K60S2.H> #include<intrins.h>#define uchar unsigned ch…

蓝桥杯单片机DS18B20代码注释及部分时序图

蓝桥杯单片机蓝桥杯单片机DS18B20代码注释及部分时序图 #include<STC15F2K60S2.H> #include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit DQP1^4;uchar code tab[]{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF}; u…

蓝桥杯单片机stc15f2k60s2 中断函数代码模板注释

用到哪些寄存器&#xff1f; 中断使能寄存器// EA1&#xff08;总使能开&#xff09;&#xff0c;ET01&#xff08;T0中断允许&#xff09; 定时器/计数器控制寄存器TCON// TH0和TL0设定值确定时间间隔&#…

Linux下文件的压缩和解压

文件的压缩和解压 Gzip格式的: tar -czvf 要存的名字.tar.gz 要打包的东西或目录 bzip2格式的: tar -cjvf 要存的名字.tar.bz2 要打包的东西或目录 压缩 解压 Gzip格式的:tar -xzvf 要解压的压缩文件 -C 解压到的目录 bzip2格式的:tar …

redhat下的iptables和firewalld 笔记

iptables命令怎么用&#xff1f; 网上看见的一个不错的图。 使用iptables命令配置的防火墙规则默认会在系统下一次重启时失效&#xff0c;如果想让配置的防火墙策略永久生效&#xff0c;还要执行保存命令&#xff1a; service iptables save 怎么理解firewalld&#xff1f; …

redhat挂载镜像软件包

挂载&#xff08;mounting&#xff09;是指由操作系统使一个存储设备&#xff08;诸如硬盘、CD-ROM或共享资源&#xff09;上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。 本质&#xff1a;针对某一设备, 分析出其文件系统结构, 并根据其文件系统类型调用…

chcon和semanage fcontext的坑

chcon后不能restorecon,不然就default_t:s0&#xff0c;samba_share_t没了 chcon semanage fcontext restorecon