#include <bits/stdc++.h> using namespace std; const int MX=100100,MQ=MX*7; int n,i,j,cur,d,st,tot,fi,fr,a[3],b[3],qx[MQ],qy[MQ],dst[3][2][MX],ans[MX]; void upd(int i, int j, int k, int d) { if (dst[i][j][k]==0) { dst[i][j][k]=d; qx[fr]=i*2+j; qy[fr++]=k; } } void proceed(int d) { for (i=0; i<3; i++) for (j=0; j<3; j++) if (i!=j) { if (b[i]<=a[j]-b[j]) { cur=b[i]; st=i; } else { cur=a[j]-b[j]; st=j; } b[j]+=cur; b[i]-=cur; upd(st,int(b[st]==a[st]),b[int(st==0)],d); b[i]+=cur; b[j]-=cur; } } int main() { memset(ans,255,sizeof(ans)); for (i=0; i<3; i++) scanf("%d",&a[i]); for (i=0; i<3; i++) { scanf("%d",&b[i]); ans[b[i]]=0; tot+=b[i]; } proceed(1); for (fi=0; fi<fr; fi++) { st=qx[fi]/2; if (qx[fi]&1) b[st]=a[st]; else b[st]=0; if (st==0) { b[1]=qy[fi]; b[2]=tot-b[1]-b[0]; } else { b[0]=qy[fi]; b[st^3]=tot-b[0]-b[st]; } d=dst[st][qx[fi]&1][qy[fi]]; for (i=0; i<3; i++) if (ans[b[i]]==-1) ans[b[i]]=d; proceed(d+1); } for (i=0; i<=a[2]; i++) printf("%d%c",ans[i],(i==a[2])?'\n':' '); return 0; }
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 | #include <bits/stdc++.h> using namespace std; const int MX=100100,MQ=MX*7; int n,i,j,cur,d,st,tot,fi,fr,a[3],b[3],qx[MQ],qy[MQ],dst[3][2][MX],ans[MX]; void upd(int i, int j, int k, int d) { if (dst[i][j][k]==0) { dst[i][j][k]=d; qx[fr]=i*2+j; qy[fr++]=k; } } void proceed(int d) { for (i=0; i<3; i++) for (j=0; j<3; j++) if (i!=j) { if (b[i]<=a[j]-b[j]) { cur=b[i]; st=i; } else { cur=a[j]-b[j]; st=j; } b[j]+=cur; b[i]-=cur; upd(st,int(b[st]==a[st]),b[int(st==0)],d); b[i]+=cur; b[j]-=cur; } } int main() { memset(ans,255,sizeof(ans)); for (i=0; i<3; i++) scanf("%d",&a[i]); for (i=0; i<3; i++) { scanf("%d",&b[i]); ans[b[i]]=0; tot+=b[i]; } proceed(1); for (fi=0; fi<fr; fi++) { st=qx[fi]/2; if (qx[fi]&1) b[st]=a[st]; else b[st]=0; if (st==0) { b[1]=qy[fi]; b[2]=tot-b[1]-b[0]; } else { b[0]=qy[fi]; b[st^3]=tot-b[0]-b[st]; } d=dst[st][qx[fi]&1][qy[fi]]; for (i=0; i<3; i++) if (ans[b[i]]==-1) ans[b[i]]=d; proceed(d+1); } for (i=0; i<=a[2]; i++) printf("%d%c",ans[i],(i==a[2])?'\n':' '); return 0; } |