记录编号 366651 评测结果 AAAAAAAAAA
题目名称 [USACO 1.4] 母亲的牛奶 最终得分 100
用户昵称 Gravatar波大比 是否通过 通过
代码语言 C++ 运行时间 0.009 s
提交时间 2017-01-25 11:15:47 内存使用 0.32 MiB
显示代码纯文本
//BFS554
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
#include <algorithm>


using namespace std;

const int nmax=1001;

int lim[4]={0};
bool ans[nmax]={0}; 
bool vis[nmax]={0};

class point
{
public:
	int tmp[4];
	
	int Index(point a)
	{
		return tmp[2]*21+tmp[3];
	}
};

queue<point> Q;

void PreDo()
{
	for(int i=1;i<=3;i++)
	{
		scanf("%d",&lim[i]);
	}
}

void Update(int &a,int &b,int lim)
{
	if(a>lim-b)
	{
		a=a-(lim-b);
		b=lim;
	}
	else
	{	
		b=a+b;
		a=0;
	}
}

void BFS()
{
	Q.push(point{0,0,0,lim[3]});
	vis[lim[3]]=1;
	ans[lim[3]]=1;
	while(!Q.empty())
	{
		point poi=Q.front();
		Q.pop();
		point opt;
		for(int i=1;i<=3;i++)
		{
			for(int j=1;j<=3;j++)
			{
				if(i!=j)
				{
					opt=poi;
					Update(opt.tmp[i],opt.tmp[j],lim[j]);
					if(!vis[opt.Index(opt)])
					{
//						printf("   %d  ",opt.Index(opt));
						vis[opt.Index(opt)]=1;
						Q.push(opt);
						if(opt.tmp[1]==0)
						{
							ans[opt.tmp[3]]=1;
						}
					}
				}
			}
		}
	}
}


void Out()
{
	for(int i=0;i<nmax;i++)
	{
		if(ans[i])
		{
			printf("%d ",i);
		}
	}
}


int main()
{
	freopen("milk3.in","r",stdin);
	freopen("milk3.out","w",stdout);
	PreDo();
	BFS();
	Out();
	return 0;
}