/*
ID: ljracm1
LANG: C++
PROB: milk3
*/
#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
#define T
using namespace std;
int vis[1000005],ex[25];
int A,B,C;
struct Set{
int a;
int b;
int c;
};
int has(int aa,int bb,int cc){
return aa*10000+bb*100+cc;
}
void bfs(){
Set s;
s.a=0; s.b=0; s.c=C;
queue<Set>q;
q.push(s);
if(s.a==0){
ex[s.c]++;
vis[has(s.a,s.b,s.c)]=1;
}
while(!q.empty()){
Set t = q.front();
q.pop();
if(t.a!=0){
Set x;
if(t.a<=B-t.b){
x.a=0; x.b=t.b+t.a; x.c=t.c;
if(!vis[has(x.a,x.b,x.c)]){
vis[has(x.a,x.b,x.c)]=1;
q.push(x);
ex[x.c]++;
}
}
else{
x.a=t.a+t.b-B; x.b=B; x.c=t.c;
if(!vis[has(x.a,x.b,x.c)]){
q.push(x);
vis[has(x.a,x.b,x.c)]=1;
}
}
if(t.a<=C-t.c){
x.a=0; x.c=t.c+t.a; x.b=t.b;
if(!vis[has(x.a,x.b,x.c)]){
q.push(x);
ex[x.c]++;
vis[has(x.a,x.b,x.c)]=1;
}
}
else{
x.a=t.a+t.c-C; x.c=C; x.b=t.b;
if(!vis[has(x.a,x.b,x.c)]){
q.push(x);
vis[has(x.a,x.b,x.c)]=1;
}
}
}
if(t.b!=0){
Set x;
if(t.b<=A-t.a){
x.b=0; x.a=t.b+t.a; x.c=t.c;
if(!vis[has(x.a,x.b,x.c)]){
vis[has(x.a,x.b,x.c)]=1;
q.push(x);
if(x.a==0)ex[x.c]++;
}
}
else{
x.b=t.a+t.b-A; x.a=A; x.c=t.c;
if(!vis[has(x.a,x.b,x.c)]){
q.push(x);
vis[has(x.a,x.b,x.c)]=1;
if(x.a==0)ex[x.c]++;
}
}
if(t.b<=C-t.c){
x.b=0; x.c=t.c+t.b; x.a=t.a;
if(!vis[has(x.a,x.b,x.c)]){
q.push(x);
if(x.a==0)ex[x.c]++;
vis[has(x.a,x.b,x.c)]=1;
}
}
else{
x.b=t.b+t.c-C; x.c=C; x.a=t.a;
if(!vis[has(x.a,x.b,x.c)]){
q.push(x);
if(x.a==0)ex[x.c]++;
vis[has(x.a,x.b,x.c)]=1;
}
}
}
if(t.c!=0){
Set x;
if(t.c<=A-t.a){
x.c=0; x.a=t.a+t.c; x.b=t.b;
if(!vis[has(x.a,x.b,x.c)]){
vis[has(x.a,x.b,x.c)]=1;
q.push(x);
if(x.a==0)ex[x.c]++;
}
}
else{
x.a=A; x.c=t.a+t.c-A; x.b=t.b;
if(!vis[has(x.a,x.b,x.c)]){
q.push(x);
vis[has(x.a,x.b,x.c)]=1;
if(x.a==0)ex[x.c]++;
}
}
if(t.c<=B-t.b){
x.c=0; x.b=t.b+t.c; x.a=t.a;
if(!vis[has(x.a,x.b,x.c)]){
q.push(x);
if(x.a==0)ex[x.c]++;
vis[has(x.a,x.b,x.c)]=1;
}
}
else{
x.c=t.b+t.c-B; x.b=B; x.a=t.a;
if(!vis[has(x.a,x.b,x.c)]){
q.push(x);
vis[has(x.a,x.b,x.c)]=1;
if(x.a==0)ex[x.c]++;
}
}
}
}
}
int main(){
#ifdef T
freopen("milk3.in","r",stdin);
freopen("milk3.out","w",stdout);
#endif
cin>>A>>B>>C;
memset(ex,0,sizeof(ex));
memset(vis,0,sizeof(vis));
bfs();
int i=0;
for(i;i<=20; i++){
if(ex[i]==1){
cout<<i;
break;
}
}
for(i=i+1; i<=20; i++){
if(ex[i]==1){
cout<<" "<<i;
}
}
cout<<endl;
return 0;
}
usaco milk3
最新推荐文章于 2023-07-03 20:16:04 发布