#include <bits/stdc++.h> using namespace std; const int N = 100'009; const int inf = 1'000'000'007; int A, B, C; map<tuple<int, int, int>, int> vis; int ans[N]; int cost; int main() { ios::sync_with_stdio(false), cin.tie(nullptr); int aa, bb, cc; cin >> A >> B >> C; cin >> aa >> bb >> cc; queue<tuple<int, int, int, int>> q; q.push({aa, bb, cc, 0}); while(q.size()) { auto add = [&q](int new_a, int new_b, int new_c, int cost) { if(vis.count(tie(new_a, new_b, new_c)) == 0) { vis[tie(new_a, new_b, new_c)] = cost; q.push(tie(new_a, new_b, new_c, cost)); } }; int a, b, c, cost; tie(a, b, c, cost) = q.front(); q.pop(); add(a - min(B - b, a), b + min(B - b, a), c, cost + 1); add(a + min(A - a, b), b - min(A - a, b), c, cost + 1); add(a - min(C - c, a), b, c + min(C - c, a), cost + 1); add(a + min(A - a, c), b, c - min(A - a, c), cost + 1); add(a, b - min(C - c, b), c + min(C - c, b), cost + 1); add(a, b + min(B - b, c), c - min(B - b, c), cost + 1); } for(int k = 0; k <= C; k++) ans[k] = inf; for(auto p : vis) { ans[get<0>(p.first)] = min(ans[get<0>(p.first)], p.second); ans[get<1>(p.first)] = min(ans[get<1>(p.first)], p.second); ans[get<2>(p.first)] = min(ans[get<2>(p.first)], p.second); } ans[aa] = 0; ans[bb] = 0; ans[cc] = 0; for(int k = 0; k <= C; k++) cout << (ans[k] == inf ? -1 : ans[k]) << ' '; 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 61 62 63 64 65 66 67 68 | #include <bits/stdc++.h> using namespace std; const int N = 100'009; const int inf = 1'000'000'007; int A, B, C; map<tuple<int, int, int>, int> vis; int ans[N]; int cost; int main() { ios::sync_with_stdio(false), cin.tie(nullptr); int aa, bb, cc; cin >> A >> B >> C; cin >> aa >> bb >> cc; queue<tuple<int, int, int, int>> q; q.push({aa, bb, cc, 0}); while(q.size()) { auto add = [&q](int new_a, int new_b, int new_c, int cost) { if(vis.count(tie(new_a, new_b, new_c)) == 0) { vis[tie(new_a, new_b, new_c)] = cost; q.push(tie(new_a, new_b, new_c, cost)); } }; int a, b, c, cost; tie(a, b, c, cost) = q.front(); q.pop(); add(a - min(B - b, a), b + min(B - b, a), c, cost + 1); add(a + min(A - a, b), b - min(A - a, b), c, cost + 1); add(a - min(C - c, a), b, c + min(C - c, a), cost + 1); add(a + min(A - a, c), b, c - min(A - a, c), cost + 1); add(a, b - min(C - c, b), c + min(C - c, b), cost + 1); add(a, b + min(B - b, c), c - min(B - b, c), cost + 1); } for(int k = 0; k <= C; k++) ans[k] = inf; for(auto p : vis) { ans[get<0>(p.first)] = min(ans[get<0>(p.first)], p.second); ans[get<1>(p.first)] = min(ans[get<1>(p.first)], p.second); ans[get<2>(p.first)] = min(ans[get<2>(p.first)], p.second); } ans[aa] = 0; ans[bb] = 0; ans[cc] = 0; for(int k = 0; k <= C; k++) cout << (ans[k] == inf ? -1 : ans[k]) << ' '; cout << '\n'; } |