#include <bits/stdc++.h> using namespace std; constexpr size_t limit = 1e5+5; struct xd { int t; int a; int b; int c; }; int A, B, C, a, b, c, lt, i, t; int ans[limit]; queue<struct xd> q; unordered_set<size_t> s; inline bool _register(const int &t, const int &a, const int &b, const int &c) { size_t id = (a*limit+b)*limit+c; if(s.count(id)!=0) return false; s.insert(id); q.push((xd){t, a, b, c}); return true; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> A >> B >> C; cin >> a >> b >> c; q.push({0,a,b,c}); for(i=0; i<=C; ++i) ans[i]=INT_MAX; while(q.size()) { auto &&h = q.front(); // cerr << h.t << ' ' << h.a << ' ' << h.b << ' ' << h.c << ' ' << (int)h.l << endl; ans[h.a] = min(ans[h.a], h.t); ans[h.b] = min(ans[h.b], h.t); ans[h.c] = min(ans[h.c], h.t); ++h.t; t = min(B, h.a+h.b)-h.b; _register(h.t, h.a-t, h.b+t, h.c ); t = min(C, h.b+h.c)-h.c; _register(h.t, h.a, h.b-t, h.c+t); t = min(C, h.a+h.c)-h.c; _register(h.t, h.a-t, h.b, h.c+t); t = min(A, h.b+h.a)-h.a; _register(h.t, h.a+t, h.b-t, h.c ); t = min(B, h.c+h.b)-h.b; _register(h.t, h.a, h.b+t, h.c-t); t = min(A, h.c+h.a)-h.a; _register(h.t, h.a+t, h.b, h.c-t); q.pop(); } for(i=0; i<=C; ++i) cout << (ans[i]==INT_MAX?-1: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 | #include <bits/stdc++.h> using namespace std; constexpr size_t limit = 1e5+5; struct xd { int t; int a; int b; int c; }; int A, B, C, a, b, c, lt, i, t; int ans[limit]; queue<struct xd> q; unordered_set<size_t> s; inline bool _register(const int &t, const int &a, const int &b, const int &c) { size_t id = (a*limit+b)*limit+c; if(s.count(id)!=0) return false; s.insert(id); q.push((xd){t, a, b, c}); return true; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> A >> B >> C; cin >> a >> b >> c; q.push({0,a,b,c}); for(i=0; i<=C; ++i) ans[i]=INT_MAX; while(q.size()) { auto &&h = q.front(); // cerr << h.t << ' ' << h.a << ' ' << h.b << ' ' << h.c << ' ' << (int)h.l << endl; ans[h.a] = min(ans[h.a], h.t); ans[h.b] = min(ans[h.b], h.t); ans[h.c] = min(ans[h.c], h.t); ++h.t; t = min(B, h.a+h.b)-h.b; _register(h.t, h.a-t, h.b+t, h.c ); t = min(C, h.b+h.c)-h.c; _register(h.t, h.a, h.b-t, h.c+t); t = min(C, h.a+h.c)-h.c; _register(h.t, h.a-t, h.b, h.c+t); t = min(A, h.b+h.a)-h.a; _register(h.t, h.a+t, h.b-t, h.c ); t = min(B, h.c+h.b)-h.b; _register(h.t, h.a, h.b+t, h.c-t); t = min(A, h.c+h.a)-h.a; _register(h.t, h.a+t, h.b, h.c-t); q.pop(); } for(i=0; i<=C; ++i) cout << (ans[i]==INT_MAX?-1:ans[i]) << ' '; cout << '\n'; } |