#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; int ans[N]; map<array<int, 3>, int> mapa; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int sz[3]; cin>>sz[0]>>sz[1]>>sz[2]; int A2, B2, C2; cin>>A2>>B2>>C2; for(int i=0;i<=sz[2]+1;i++) ans[i]=1e9; queue<array<int, 3>> order; mapa[{A2, B2, C2}]=0; order.push({A2, B2, C2}); while(!order.empty()){ auto t = order.front(); order.pop(); int wyn = mapa[{t[0], t[1], t[2]}]; ans[t[0]]=min(ans[t[0]], wyn); ans[t[1]]=min(ans[t[1]], wyn); ans[t[2]]=min(ans[t[2]], wyn); for(int i=0;i<=2;i++){ for(int j=0;j<=2;j++){ if(i==j) continue; int a=min(sz[j]-t[j], t[i]); int zs[3] = {t[0], t[1], t[2]}; zs[i]-=a; zs[j]+=a; if((zs[0]!=A2||zs[1]!=B2||C2!=zs[2])&&mapa[{zs[0], zs[1], zs[2]}]==0){ mapa[{zs[0], zs[1], zs[2]}]=mapa[{t[0], t[1], t[2]}]+1; order.push({zs[0], zs[1], zs[2]}); } } } } for(int i=0;i<=sz[2];i++){ if(ans[i]==1e9) cout<<"-1 "; else cout<<ans[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 | #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; int ans[N]; map<array<int, 3>, int> mapa; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int sz[3]; cin>>sz[0]>>sz[1]>>sz[2]; int A2, B2, C2; cin>>A2>>B2>>C2; for(int i=0;i<=sz[2]+1;i++) ans[i]=1e9; queue<array<int, 3>> order; mapa[{A2, B2, C2}]=0; order.push({A2, B2, C2}); while(!order.empty()){ auto t = order.front(); order.pop(); int wyn = mapa[{t[0], t[1], t[2]}]; ans[t[0]]=min(ans[t[0]], wyn); ans[t[1]]=min(ans[t[1]], wyn); ans[t[2]]=min(ans[t[2]], wyn); for(int i=0;i<=2;i++){ for(int j=0;j<=2;j++){ if(i==j) continue; int a=min(sz[j]-t[j], t[i]); int zs[3] = {t[0], t[1], t[2]}; zs[i]-=a; zs[j]+=a; if((zs[0]!=A2||zs[1]!=B2||C2!=zs[2])&&mapa[{zs[0], zs[1], zs[2]}]==0){ mapa[{zs[0], zs[1], zs[2]}]=mapa[{t[0], t[1], t[2]}]+1; order.push({zs[0], zs[1], zs[2]}); } } } } for(int i=0;i<=sz[2];i++){ if(ans[i]==1e9) cout<<"-1 "; else cout<<ans[i]<<" "; } return 0; } |