#include <bits/stdc++.h> #define ll long long int using namespace std; struct konf { int a, b, c, k; }; const int maks=1e5+5; int cost[maks]; queue <konf> q; unordered_map <ll, bool> odw; ll hasz(int a, int b, int c) { ll wyn=(ll)a+1e6*(ll)b+1e12*(ll)c; return wyn; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int A, B, C, a, b, c; cin>>A>>B>>C>>a>>b>>c; for(int i=0; i<=C; ++i) cost[i]=INT_MAX; cost[a]=0, cost[b]=0, cost[c]=0; odw[hasz(a, b, c)]=1; q.push({a, b, c, 0}); while(!q.empty()) { konf akt=q.front(); q.pop(); a=akt.a; b=akt.b; c=akt.c; int k=akt.k; int x[6], y[6], z[6]; x[0]=max(a-(B-b), 0), y[0]=min(b+a, B), z[0]=c; x[1]=max(a-(C-c), 0), y[1]=b, z[1]=min(c+a, C); x[2]=min(a+b, A), y[2]=max(b-(A-a), 0), z[2]=c; x[3]=a, y[3]=max(b-(C-c), 0), z[3]=min(b+c, C); x[4]=min(a+c, A), y[4]=b, z[4]=max(c-(A-a), 0); x[5]=a, y[5]=min(b+c, B), z[5]=max(c-(B-b), 0); for(int i=0; i<6; ++i) { if(!odw[hasz(x[i], y[i], z[i])]) { //cout<<x[i]<<" "<<y[i]<<" "<<z[i]<<"\n"; odw[hasz(x[i], y[i], z[i])]=1; q.push({x[i], y[i], z[i], k+1}); cost[x[i]]=min(cost[x[i]], k+1); cost[y[i]]=min(cost[y[i]], k+1); cost[z[i]]=min(cost[z[i]], k+1); } } } for(int i=0; i<=C; ++i) { if(cost[i]==INT_MAX) cout<<"-1 "; else cout<<cost[i]<<" "; } 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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <bits/stdc++.h> #define ll long long int using namespace std; struct konf { int a, b, c, k; }; const int maks=1e5+5; int cost[maks]; queue <konf> q; unordered_map <ll, bool> odw; ll hasz(int a, int b, int c) { ll wyn=(ll)a+1e6*(ll)b+1e12*(ll)c; return wyn; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int A, B, C, a, b, c; cin>>A>>B>>C>>a>>b>>c; for(int i=0; i<=C; ++i) cost[i]=INT_MAX; cost[a]=0, cost[b]=0, cost[c]=0; odw[hasz(a, b, c)]=1; q.push({a, b, c, 0}); while(!q.empty()) { konf akt=q.front(); q.pop(); a=akt.a; b=akt.b; c=akt.c; int k=akt.k; int x[6], y[6], z[6]; x[0]=max(a-(B-b), 0), y[0]=min(b+a, B), z[0]=c; x[1]=max(a-(C-c), 0), y[1]=b, z[1]=min(c+a, C); x[2]=min(a+b, A), y[2]=max(b-(A-a), 0), z[2]=c; x[3]=a, y[3]=max(b-(C-c), 0), z[3]=min(b+c, C); x[4]=min(a+c, A), y[4]=b, z[4]=max(c-(A-a), 0); x[5]=a, y[5]=min(b+c, B), z[5]=max(c-(B-b), 0); for(int i=0; i<6; ++i) { if(!odw[hasz(x[i], y[i], z[i])]) { //cout<<x[i]<<" "<<y[i]<<" "<<z[i]<<"\n"; odw[hasz(x[i], y[i], z[i])]=1; q.push({x[i], y[i], z[i], k+1}); cost[x[i]]=min(cost[x[i]], k+1); cost[y[i]]=min(cost[y[i]], k+1); cost[z[i]]=min(cost[z[i]], k+1); } } } for(int i=0; i<=C; ++i) { if(cost[i]==INT_MAX) cout<<"-1 "; else cout<<cost[i]<<" "; } return 0; } |