#include<bits/stdc++.h> using namespace std; using LL=long long; #define FOR(i,l,r) for(int i=(l);i<=(r);++i) #define REP(i,n) FOR(i,0,(n)-1) #define ssize(x) int(x.size()) template<class A,class B>auto&operator<<(ostream&o,pair<A,B>p){return o<<'('<<p.first<<", "<<p.second<<')';} template<class T>auto operator<<(ostream&o,T x)->decltype(x.end(),o){o<<'{';int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<'}';} #ifdef DEBUG #define debug(x...) cerr<<"["#x"]: ",[](auto...$){((cerr<<$<<"; "),...)<<'\n';}(x) #else #define debug(...) {} #endif int main() { cin.tie(0)->sync_with_stdio(0); int A, B, C; int a, b, c; cin >> A >> B >> C; cin >> a >> b >> c; vector<int> ans(C + 1, -1); set<tuple<int,int,int>> s; queue<pair<int,tuple<int,int,int>>> q; q.emplace(pair{0, tuple{a, b, c}}); while (!q.empty()) { auto [d, t] = q.front(); q.pop(); if (s.find(t) != s.end()) { continue; } s.emplace(t); auto [a, b, c] = t; if (ans[a] == -1) { ans[a] = d; } if (ans[b] == -1) { ans[b] = d; } if (ans[c] == -1) { ans[c] = d; } int rac = min(a, C - c); q.emplace(pair{d + 1, tuple{a - rac, b, c + rac}}); int rca = min(A - a, c); q.emplace(pair{d + 1, tuple{a + rca, b, c - rca}}); int rab = min(a, B - b); q.emplace(pair{d + 1, tuple{a - rab, b + rab, c}}); int rba = min(A - a, b); q.emplace(pair{d + 1, tuple{a + rba, b - rba, c}}); int rbc = min(b, C - c); q.emplace(pair{d + 1, tuple{a, b - rbc, c + rbc}}); int rcb = min(B - b, c); q.emplace(pair{d + 1, tuple{a, b + rcb, c - rcb}}); } REP(i,C+1) { cout << ans[i] << ' '; } cout << '\n'; }
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 | #include<bits/stdc++.h> using namespace std; using LL=long long; #define FOR(i,l,r) for(int i=(l);i<=(r);++i) #define REP(i,n) FOR(i,0,(n)-1) #define ssize(x) int(x.size()) template<class A,class B>auto&operator<<(ostream&o,pair<A,B>p){return o<<'('<<p.first<<", "<<p.second<<')';} template<class T>auto operator<<(ostream&o,T x)->decltype(x.end(),o){o<<'{';int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<'}';} #ifdef DEBUG #define debug(x...) cerr<<"["#x"]: ",[](auto...$){((cerr<<$<<"; "),...)<<'\n';}(x) #else #define debug(...) {} #endif int main() { cin.tie(0)->sync_with_stdio(0); int A, B, C; int a, b, c; cin >> A >> B >> C; cin >> a >> b >> c; vector<int> ans(C + 1, -1); set<tuple<int,int,int>> s; queue<pair<int,tuple<int,int,int>>> q; q.emplace(pair{0, tuple{a, b, c}}); while (!q.empty()) { auto [d, t] = q.front(); q.pop(); if (s.find(t) != s.end()) { continue; } s.emplace(t); auto [a, b, c] = t; if (ans[a] == -1) { ans[a] = d; } if (ans[b] == -1) { ans[b] = d; } if (ans[c] == -1) { ans[c] = d; } int rac = min(a, C - c); q.emplace(pair{d + 1, tuple{a - rac, b, c + rac}}); int rca = min(A - a, c); q.emplace(pair{d + 1, tuple{a + rca, b, c - rca}}); int rab = min(a, B - b); q.emplace(pair{d + 1, tuple{a - rab, b + rab, c}}); int rba = min(A - a, b); q.emplace(pair{d + 1, tuple{a + rba, b - rba, c}}); int rbc = min(b, C - c); q.emplace(pair{d + 1, tuple{a, b - rbc, c + rbc}}); int rcb = min(B - b, c); q.emplace(pair{d + 1, tuple{a, b + rcb, c - rcb}}); } REP(i,C+1) { cout << ans[i] << ' '; } cout << '\n'; } |