题目1457:非常可乐

题目1457:非常可乐

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:522

解决:249

题目描述:

大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升(正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出"NO"。

输入:

三个整数 : S 可乐的体积 , N 和 M是两个杯子的容量,以"0 0 0"结束。

输出:

如果能平分的话请输出最少要倒的次数,否则输出"NO"。

样例输入:
7 4 3
4 1 3
0 0 0
样例输出:
NO
3
c++代码:
//1457 非常可乐
//每种状态下都有六种可能性 
#include<cstdio>
#include<queue>
using namespace std;

int va,vb,vc;//va为初始满杯 
const int MAX = 101;
struct node
{
	int a,b,c;//a b c三个容器的当前可乐体积
	int t;//倾倒次数 
	node(int x,int y,int z,int s)
	{
		a=x,b=y,c=z,t=s;
	}
	bool match()
	{
		if((a==va/2&&b==va/2)||(a==va/2&&c==va/2)||
			(b==va/2&&c==va/2))
			return true;
		else
			return false;
	}
};
int mark[MAX][MAX][MAX];//标记已访问 

//nows nowd为当前源和目的的体积,alls,alld为源和目的的本体积 
void stod(int &nows,int &nowd,int alls,int alld)
{
	if(nows>=(alld-nowd))
	{
		nows -= (alld-nowd);
		nowd = alld;
	}
	else
	{
		nowd += nows; 
		nows = 0;
	}
}
int
main(void)
{
	queue<node> coca;
	while(~scanf("%d%d%d",&va,&vb,&vc) &&va!=0&&vb!=0&&vc!=0)
	{
		if(va%2!=0)
		{
			printf("NO\n");
			continue;
		}
		//初始化
		while(!coca.empty())
		{
			coca.pop();
		}
		for(int i=0;i<MAX;++i)
			for(int j=0;j<MAX;++j)
				for(int k=0;k<MAX;++k)
					mark[i][j][k]=0;
		node ini(va,0,0,0);//初始化第一个点 
		coca.push(ini);//入队 
		mark[va][0][0] = 1;//置已访问 
		bool found = false;
		int ans = -1;
		//遍历 
		while(!coca.empty())
		{
			node fst = coca.front();
			coca.pop();
			int nowt = fst.t,a,b,c;
			if(fst.match())
			{
				found = true;
				ans = nowt;
				break;
			} 
			//六种情况
			int savea=fst.a,saveb=fst.b,savec=fst.c;
			//a->b
			a=savea,b=saveb,c=savec;
			stod(a,b,va,vb);
			if(mark[a][b][c]==0)
			{
				coca.push(node(a,b,c,nowt+1));
				mark[a][b][c]=1;
			}
			//a->c
			a=savea,b=saveb,c=savec;
			stod(a,c,va,vc);
			if(mark[a][b][c]==0)
			{
				coca.push(node(a,b,c,nowt+1));
				mark[a][b][c]=1;
			}
			//b->a
			a=savea,b=saveb,c=savec;
			stod(b,a,vb,va);
			if(mark[a][b][c]==0)
			{
				coca.push(node(a,b,c,nowt+1));
				mark[a][b][c]=1;
			}
			//b->C
			a=savea,b=saveb,c=savec;
			stod(b,c,vb,vc);
			if(mark[a][b][c]==0)
			{
				coca.push(node(a,b,c,nowt+1));
				mark[a][b][c]=1;
			}
			//c->a
			a=savea,b=saveb,c=savec;
			stod(c,a,vc,va);
			if(mark[a][b][c]==0)
			{
				coca.push(node(a,b,c,nowt+1));
				mark[a][b][c]=1;
			}
			//c->b
			a=savea,b=saveb,c=savec;
			stod(c,b,vc,vb);
			if(mark[a][b][c]==0)
			{
				coca.push(node(a,b,c,nowt+1));
				mark[a][b][c]=1;
			}
		}
		
		if(found==true)
			printf("%d\n",ans);
		else
			printf("NO\n");
	}
	return 0;
} 


weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值