#include <iostream> #include <queue> #include <set> using namespace std; struct Pos { int t[3], r; }; struct comperator { inline bool operator () (const Pos &a, const Pos &b) const { if(a.t[0] != b.t[0]) return a.t[0] < b.t[0]; if(a.t[1] != b.t[1]) return a.t[1] < b.t[1]; return a.t[2] < b.t[2]; } }; constexpr int N = 1e5+7; set <Pos,comperator> odw; queue <Pos> kol; int odp[N], licz; Pos mk; inline void bfs(Pos v) { kol.push(v); while(!kol.empty() && licz) { v = kol.front(); kol.pop(); if(odw.find(v) != odw.end()) continue; odw.insert(v); for(int i=0;i!=3;i++) for(int j=0;j!=3;j++) if(i != j) { // z i do j Pos u = v; u.r++; int z = min(u.t[i],mk.t[j] - u.t[j]); u.t[i] -= z; u.t[j] += z; if(odw.find(u) == odw.end()) { kol.push(u); for(int k=0;k!=3;k++) if(!odp[u.t[k]]) { odp[u.t[k]] = u.r; licz--; } } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(); Pos s; s.r=1; cin>>mk.t[0]>>mk.t[1]>>mk.t[2]>>s.t[0]>>s.t[1]>>s.t[2]; licz = mk.t[2]+1; for(int i=0;i!=3;i++) if(!odp[s.t[i]]) { odp[s.t[i]] = 1; licz--; } bfs(s); for(int i=0;i<=mk.t[2];i++) cout<<odp[i]-1<<" "; 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 | #include <iostream> #include <queue> #include <set> using namespace std; struct Pos { int t[3], r; }; struct comperator { inline bool operator () (const Pos &a, const Pos &b) const { if(a.t[0] != b.t[0]) return a.t[0] < b.t[0]; if(a.t[1] != b.t[1]) return a.t[1] < b.t[1]; return a.t[2] < b.t[2]; } }; constexpr int N = 1e5+7; set <Pos,comperator> odw; queue <Pos> kol; int odp[N], licz; Pos mk; inline void bfs(Pos v) { kol.push(v); while(!kol.empty() && licz) { v = kol.front(); kol.pop(); if(odw.find(v) != odw.end()) continue; odw.insert(v); for(int i=0;i!=3;i++) for(int j=0;j!=3;j++) if(i != j) { // z i do j Pos u = v; u.r++; int z = min(u.t[i],mk.t[j] - u.t[j]); u.t[i] -= z; u.t[j] += z; if(odw.find(u) == odw.end()) { kol.push(u); for(int k=0;k!=3;k++) if(!odp[u.t[k]]) { odp[u.t[k]] = u.r; licz--; } } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(); Pos s; s.r=1; cin>>mk.t[0]>>mk.t[1]>>mk.t[2]>>s.t[0]>>s.t[1]>>s.t[2]; licz = mk.t[2]+1; for(int i=0;i!=3;i++) if(!odp[s.t[i]]) { odp[s.t[i]] = 1; licz--; } bfs(s); for(int i=0;i<=mk.t[2];i++) cout<<odp[i]-1<<" "; return 0; } |