记录编号 |
270002 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO 1.4] 母亲的牛奶 |
最终得分 |
100 |
用户昵称 |
liu_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;
}