记录编号 270002 评测结果 AAAAAAAAAA
题目名称 [USACO 1.4] 母亲的牛奶 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2016-06-14 11:24:44 内存使用 0.41 MiB
显示代码纯文本
#include<cstdio>
int A,B,C;
bool able[30];
bool vis[10000];
struct node{
	int a,b,c;
	node(){
		
	}
	node(int _a,int _b,int _c){
		a=_a;b=_b;c=_c;
	}
}q[10000];
int head,tail;
int min(int a,int b){
	return a<b?a:b;
}
bool use(node &n){
	return vis[(20*n.a+n.b)*20+n.c];
}
void mark(node &n){
	vis[(20*n.a+n.b)*20+n.c]=true;
}
void bfs(){
	head=tail=0;
	vis[C]=true;
	q[tail++]=node(0,0,C);
	node tmp,tmp2;
	int delta;
	while(head!=tail){
		tmp=q[head++];
		if(!tmp.a){
			able[tmp.c]=true;
		}
		if(tmp.a&&tmp.b!=B){
			tmp2=tmp;
			delta=min(tmp.a,B-tmp.b);
			tmp2.a-=delta;tmp2.b+=delta;
			if(!use(tmp2)){
				mark(tmp2);
				q[tail++]=tmp2;
			}
		}
		if(tmp.a&&tmp.c!=C){
			tmp2=tmp;
			delta=min(tmp.a,C-tmp.c);
			tmp2.a-=delta;tmp2.c+=delta;
			if(!use(tmp2)){
				mark(tmp2);
				q[tail++]=tmp2;
			}
		}
		if(tmp.b&&tmp.a!=A){
			tmp2=tmp;
			delta=min(tmp.b,A-tmp.a);
			tmp2.b-=delta;tmp2.a+=delta;
			if(!use(tmp2)){
				mark(tmp2);
				q[tail++]=tmp2;
			}
		}
		if(tmp.b&&tmp.c!=C){
			tmp2=tmp;
			delta=min(tmp.b,C-tmp.c);
			tmp2.b-=delta;tmp2.c+=delta;
			if(!use(tmp2)){
				mark(tmp2);
				q[tail++]=tmp2;
			}
		}
		if(tmp.c&&tmp.a!=A){
			tmp2=tmp;
			delta=min(tmp.c,A-tmp.a);
			tmp2.c-=delta;tmp2.a+=delta;
			if(!use(tmp2)){
				mark(tmp2);
				q[tail++]=tmp2;
			}
		}
		if(tmp.c&&tmp.b!=B){
			tmp2=tmp;
			delta=min(tmp.c,B-tmp.b);
			tmp2.c-=delta;tmp2.b+=delta;
			if(!use(tmp2)){
				mark(tmp2);
				q[tail++]=tmp2;
			}
		}
	}
}
int main(){
	freopen("milk3.in","r",stdin);
	freopen("milk3.out","w",stdout);
	scanf("%d %d %d",&A,&B,&C);
	bfs();
	for(int i=0;i<=C;++i)if(able[i])printf("%d ",i);
	fclose(stdin);fclose(stdout);
	return 0;
}