1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include <bits/stdc++.h>
using namespace std;
const int N = 21; int A,B,C; struct node{ int a,b,c; }q[N*N*N]; int hh=0,tt=-1;
bool st[N][N][N]; int s[N];
void insert(int a, int b, int c){ if(!st[a][b][c]){ q[++tt] = {a,b,c}; st[a][b][c] = true; } } void bfs(){ q[++tt] = {0,0,C}; st[0][0][C] = true; while(hh <= tt){ node t = q[hh]; hh++; int a = t.a; int b = t.b; int c = t.c; insert(a-min(a,B-b), min(a+b,B), c); insert(a-min(a,C-c), b, min(a+c,C)); insert(min(a+b,A), b-min(b,A-a), c); insert(a, b-min(b,C-c), min(b+c,C)); insert(min(a+c,A), b, c-min(c,A-a)); insert(a, min(b+c,B), c-min(c,B-b)); } }
int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> A >> B >> C; bfs(); int cnt = 0; for(int i=0;i<hh;i++){ if(q[i].a == 0){ s[cnt] = q[i].c; cnt++; } } sort(s,s+cnt); for(int i=0;i<cnt;i++){ cout << s[i] << " "; } return 0; }
|