#include <bits/stdc++.h> #define ll long long #define f first #define s second using namespace std; int A, B, C; map<pair<pair<int, int>, int>, int> mp; void solve(int a, int b, int c){ queue<pair<pair<int, int>, int>> q; q.push({{a, b}, c}); while(q.size()){ pair<pair<int, int>, int> tmp = q.front(); q.pop(); a = tmp.f.f; b = tmp.f.s; c = tmp.s; int v = mp[{{a, b}, c}]; int na, nb, nc; na = min(A, a+b); nb = max(0, b-(A-a)); nc = c; if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = max(0, a-(B-b)); nb = min(B, a+b); nc = c; if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = a; nb = min(B, c+b); nc = max(0, c-(B-b)); if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = a; nb = max(0, b-(C-c)); nc = min(C, c+b); if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = min(A, a+c); nb = b; nc = max(0, c-(A-a)); if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = max(0, a-(C-c)); nb = b; nc = min(C, c+a); if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } } } int main(){ ios_base::sync_with_stdio(0); cin>>A>>B>>C; int a, b, c; cin>>a>>b>>c; mp[{{a, b}, c}] = 1; solve(a, b, c); vector<int> wyn(C+1, 1e9); for(auto it:mp){ int v = it.s; int a = it.f.f.f; wyn[a] = min(wyn[a], v); a = it.f.f.s; wyn[a] = min(wyn[a], v); a = it.f.s; wyn[a] = min(wyn[a], v); } for(auto it:wyn){ if(it==1e9) cout<<-1<<" "; else cout<<it-1<<" "; } cout<<'\n'; 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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #include <bits/stdc++.h> #define ll long long #define f first #define s second using namespace std; int A, B, C; map<pair<pair<int, int>, int>, int> mp; void solve(int a, int b, int c){ queue<pair<pair<int, int>, int>> q; q.push({{a, b}, c}); while(q.size()){ pair<pair<int, int>, int> tmp = q.front(); q.pop(); a = tmp.f.f; b = tmp.f.s; c = tmp.s; int v = mp[{{a, b}, c}]; int na, nb, nc; na = min(A, a+b); nb = max(0, b-(A-a)); nc = c; if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = max(0, a-(B-b)); nb = min(B, a+b); nc = c; if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = a; nb = min(B, c+b); nc = max(0, c-(B-b)); if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = a; nb = max(0, b-(C-c)); nc = min(C, c+b); if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = min(A, a+c); nb = b; nc = max(0, c-(A-a)); if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } na = max(0, a-(C-c)); nb = b; nc = min(C, c+a); if(mp[{{na, nb}, nc}]==0){ mp[{{na, nb}, nc}] = v+1; q.push({{na, nb}, nc}); } } } int main(){ ios_base::sync_with_stdio(0); cin>>A>>B>>C; int a, b, c; cin>>a>>b>>c; mp[{{a, b}, c}] = 1; solve(a, b, c); vector<int> wyn(C+1, 1e9); for(auto it:mp){ int v = it.s; int a = it.f.f.f; wyn[a] = min(wyn[a], v); a = it.f.f.s; wyn[a] = min(wyn[a], v); a = it.f.s; wyn[a] = min(wyn[a], v); } for(auto it:wyn){ if(it==1e9) cout<<-1<<" "; else cout<<it-1<<" "; } cout<<'\n'; return 0; } |