#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); } } |
English