#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define p_b push_back
#define m_p make_pair
#define fi first
#define se second
const int maxn = 1000001;
ll mod = 1000000007;
void bfs(int pa, int pb, int pc, int a, int b, int c, vector<int> &resy){
queue<vector<int>> que;
map<vector<int>, bool> vis;
map<vector<int>, int> dis;
que.push({a, b, c});
vis[{a, b, c}] = true;
dis[{a, b, c}] = 0;
while((int)que.size()){
vector<int> t = que.front();
que.pop();
int da = dis[t];
resy[t[0]] = min(resy[t[0]], da);
resy[t[1]] = min(resy[t[1]], da);
resy[t[2]] = min(resy[t[2]], da);
int a = t[0], b = t[1], c = t[2];
vector<int> ab = {a-min(a, pb-b), b+min(a, pb-b), c}, ac = {a-min(a, pc-c), b, c+min(a, pc-c)};
vector<int> ba = {a+min(b, pa-a), b-min(b, pa-a), c}, bc = {a, b-min(b, pc-c), c+min(b, pc-c)};
vector<int> ca = {a+min(c, pa-a), b, c-min(c, pa-a)}, cb = {a, b+min(c, pb-b), c-min(c, pb-b)};
if(!vis[ab]){
dis[ab] = da+1;
vis[ab] = true;
que.push(ab);
}
if(!vis[ac]){
dis[ac] = da+1;
vis[ac] = true;
que.push(ac);
}
if(!vis[ba]){
dis[ba] = da+1;
vis[ba] = true;
que.push(ba);
}
if(!vis[bc]){
dis[bc] = da+1;
vis[bc] = true;
que.push(bc);
}
if(!vis[ca]){
dis[ca] = da+1;
vis[ca] = true;
que.push(ca);
}
if(!vis[cb]){
dis[cb] = da+1;
vis[cb] = true;
que.push(cb);
}
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int pa, pb, pc, a, b, c; cin>>pa>>pb>>pc>>a>>b>>c;
vector<int> resy(pc+1);
for(int i = 0; i<=pc; i++)
resy[i] = mod;
bfs(pa, pb, pc, a, b, c, resy);
for(auto i: resy){
if(i==mod) cout<<-1<<" ";
else cout<<i<<" ";
}
}
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 | #include <bits/stdc++.h> using namespace std; #define ll long long #define p_b push_back #define m_p make_pair #define fi first #define se second const int maxn = 1000001; ll mod = 1000000007; void bfs(int pa, int pb, int pc, int a, int b, int c, vector<int> &resy){ queue<vector<int>> que; map<vector<int>, bool> vis; map<vector<int>, int> dis; que.push({a, b, c}); vis[{a, b, c}] = true; dis[{a, b, c}] = 0; while((int)que.size()){ vector<int> t = que.front(); que.pop(); int da = dis[t]; resy[t[0]] = min(resy[t[0]], da); resy[t[1]] = min(resy[t[1]], da); resy[t[2]] = min(resy[t[2]], da); int a = t[0], b = t[1], c = t[2]; vector<int> ab = {a-min(a, pb-b), b+min(a, pb-b), c}, ac = {a-min(a, pc-c), b, c+min(a, pc-c)}; vector<int> ba = {a+min(b, pa-a), b-min(b, pa-a), c}, bc = {a, b-min(b, pc-c), c+min(b, pc-c)}; vector<int> ca = {a+min(c, pa-a), b, c-min(c, pa-a)}, cb = {a, b+min(c, pb-b), c-min(c, pb-b)}; if(!vis[ab]){ dis[ab] = da+1; vis[ab] = true; que.push(ab); } if(!vis[ac]){ dis[ac] = da+1; vis[ac] = true; que.push(ac); } if(!vis[ba]){ dis[ba] = da+1; vis[ba] = true; que.push(ba); } if(!vis[bc]){ dis[bc] = da+1; vis[bc] = true; que.push(bc); } if(!vis[ca]){ dis[ca] = da+1; vis[ca] = true; que.push(ca); } if(!vis[cb]){ dis[cb] = da+1; vis[cb] = true; que.push(cb); } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int pa, pb, pc, a, b, c; cin>>pa>>pb>>pc>>a>>b>>c; vector<int> resy(pc+1); for(int i = 0; i<=pc; i++) resy[i] = mod; bfs(pa, pb, pc, a, b, c, resy); for(auto i: resy){ if(i==mod) cout<<-1<<" "; else cout<<i<<" "; } } |
English