#include <bits/stdc++.h> using namespace std; struct xd { int a; int b; int c; int r; }; int x,y,z,a,b,c; int w[100005]; queue <xd> q; map < pair<pair<int,int>,int>,bool > m; void wrzuc (int a, int b, int c, int r) { xd tmp; tmp.a=a; tmp.b=b; tmp.c=c; tmp.r=r; q.push(tmp); } void policz(int a,int b,int c, int r) { xd p; p.a=a; p.b=b; p.c=c; p.r=1; q.push(p); while (!q.empty()) { p=q.front(); q.pop(); a=p.a; b=p.b; c=p.c; r=p.r; //cout << p.a << " " << p.b << " " << p.c << " " << p.r << endl; if (m[{{a,b},c}]) continue; else m[{{a,b},c}]=1; if (w[a]==0) w[a]=r; if (w[b]==0) w[b]=r; if (w[c]==0) w[c]=r; if (a+b<=y) wrzuc(0,a+b,c,r+1); else wrzuc(a-y+b,y,c,r+1); if (a+c<=z) wrzuc(0,b,c+a,r+1); else wrzuc(a-z+c,b,z,r+1); if (b+a<=x) wrzuc(a+b,0,c,r+1); else wrzuc(x,b-x+a,c,r+1); if (b+c<=z) wrzuc(a,0,b+c,r+1); else wrzuc(a,b-z+c,z,r+1); if (c+a<=x) wrzuc(c+a,b,0,r+1); else wrzuc(x,b,c-x+a,r+1); if (c+b<=y) wrzuc(a,c+b,0,r+1); else wrzuc(a,y,c-y+b,r+1); } } int main() { scanf("%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c); policz(a,b,c,1); for (int i=0; i<=z; i++) { printf("%d ",w[i]-1); } }
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 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include <bits/stdc++.h> using namespace std; struct xd { int a; int b; int c; int r; }; int x,y,z,a,b,c; int w[100005]; queue <xd> q; map < pair<pair<int,int>,int>,bool > m; void wrzuc (int a, int b, int c, int r) { xd tmp; tmp.a=a; tmp.b=b; tmp.c=c; tmp.r=r; q.push(tmp); } void policz(int a,int b,int c, int r) { xd p; p.a=a; p.b=b; p.c=c; p.r=1; q.push(p); while (!q.empty()) { p=q.front(); q.pop(); a=p.a; b=p.b; c=p.c; r=p.r; //cout << p.a << " " << p.b << " " << p.c << " " << p.r << endl; if (m[{{a,b},c}]) continue; else m[{{a,b},c}]=1; if (w[a]==0) w[a]=r; if (w[b]==0) w[b]=r; if (w[c]==0) w[c]=r; if (a+b<=y) wrzuc(0,a+b,c,r+1); else wrzuc(a-y+b,y,c,r+1); if (a+c<=z) wrzuc(0,b,c+a,r+1); else wrzuc(a-z+c,b,z,r+1); if (b+a<=x) wrzuc(a+b,0,c,r+1); else wrzuc(x,b-x+a,c,r+1); if (b+c<=z) wrzuc(a,0,b+c,r+1); else wrzuc(a,b-z+c,z,r+1); if (c+a<=x) wrzuc(c+a,b,0,r+1); else wrzuc(x,b,c-x+a,r+1); if (c+b<=y) wrzuc(a,c+b,0,r+1); else wrzuc(a,y,c-y+b,r+1); } } int main() { scanf("%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c); policz(a,b,c,1); for (int i=0; i<=z; i++) { printf("%d ",w[i]-1); } } |