#include <bits/stdc++.h> using namespace std; const long long H1=1e10+100, H2=1e5+10, INF=0x3f3f3f3f; long long hsh(int a, int b, int c) { return H1*a + H2*b + c; } unordered_set<long long>zbior; int odp[H2]; struct typ{ int a, b, c, t; }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); memset(odp, 0x3f, sizeof(odp)); int v[3], p[3], t; cin>>v[0]>>v[1]>>v[2]>>p[0]>>p[1]>>p[2]; queue<typ>kol; kol.push({p[0], p[1], p[2], 0}); while (!kol.empty()) { p[0]=kol.front().a; p[1]=kol.front().b; p[2]=kol.front().c; t=kol.front().t; kol.pop(); if (!zbior.insert(hsh(p[0], p[1], p[2])).second) continue; odp[p[0]]=min(odp[p[0]], t); odp[p[1]]=min(odp[p[1]], t); odp[p[2]]=min(odp[p[2]], t); for (int i=0; i<3; i++) { for (int j=0; j<3; j++) { if (i == j) continue; int r=min(p[i], v[j]-p[j]); p[i]-=r; p[j]+=r; kol.push({p[0], p[1], p[2], t+1}); p[i]+=r; p[j]-=r; } } } for (int i=0; i<=v[2]; i++) { cout<<(odp[i]==INF? -1 : odp[i])<<" "; } } /* 90007 90011 90017 50000 60000 70000 */
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 long long H1=1e10+100, H2=1e5+10, INF=0x3f3f3f3f; long long hsh(int a, int b, int c) { return H1*a + H2*b + c; } unordered_set<long long>zbior; int odp[H2]; struct typ{ int a, b, c, t; }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); memset(odp, 0x3f, sizeof(odp)); int v[3], p[3], t; cin>>v[0]>>v[1]>>v[2]>>p[0]>>p[1]>>p[2]; queue<typ>kol; kol.push({p[0], p[1], p[2], 0}); while (!kol.empty()) { p[0]=kol.front().a; p[1]=kol.front().b; p[2]=kol.front().c; t=kol.front().t; kol.pop(); if (!zbior.insert(hsh(p[0], p[1], p[2])).second) continue; odp[p[0]]=min(odp[p[0]], t); odp[p[1]]=min(odp[p[1]], t); odp[p[2]]=min(odp[p[2]], t); for (int i=0; i<3; i++) { for (int j=0; j<3; j++) { if (i == j) continue; int r=min(p[i], v[j]-p[j]); p[i]-=r; p[j]+=r; kol.push({p[0], p[1], p[2], t+1}); p[i]+=r; p[j]-=r; } } } for (int i=0; i<=v[2]; i++) { cout<<(odp[i]==INF? -1 : odp[i])<<" "; } } /* 90007 90011 90017 50000 60000 70000 */ |