//Jakub Rozek //Butelki //czas: nlogn //pamiec: nlogn #include "bits/stdc++.h" using namespace std; const int N=100005; int A,B,C,a,b,c,d,x,y; map <pair<int,int>,int> M; queue <pair<int,int> > q; int odp[N]; int przelej(int q, int P, int p) { return min(q,P-p); } void ustaw(int qq, int w, int e, int r) { int s=M[{qq,w}]; if(s==0 || r<s) { M[{qq,w}]=r; q.push({qq,w}); } } void bfs() { while(!q.empty()) { a=q.front().first; b=q.front().second; q.pop(); c=d-a-b; x=M[{a,b}]; if(odp[a]==0) odp[a]=x; if(odp[b]==0) odp[b]=x; if(odp[c]==0) odp[c]=x; odp[a]=min(odp[a],x); odp[b]=min(odp[b],x); odp[c]=min(odp[c],x); ++x; y=przelej(a,B,b); ustaw(a-y,b+y,c,x); y=przelej(b,A,a); ustaw(a+y,b-y,c,x); y=przelej(a,C,c); ustaw(a-y,b,c+y,x); y=przelej(c,A,a); ustaw(a+y,b,c-y,x); y=przelej(b,C,c); ustaw(a,b-y,c+y,x); y=przelej(c,B,b); ustaw(a,b+y,c-y,x); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>A>>B>>C>>a>>b>>c; d=a+b+c; M[{a,b}]=1; q.push({a,b}); bfs(); for(int i=0; i<=C; ++i) cout<<odp[i]-1<<" "; 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 | //Jakub Rozek //Butelki //czas: nlogn //pamiec: nlogn #include "bits/stdc++.h" using namespace std; const int N=100005; int A,B,C,a,b,c,d,x,y; map <pair<int,int>,int> M; queue <pair<int,int> > q; int odp[N]; int przelej(int q, int P, int p) { return min(q,P-p); } void ustaw(int qq, int w, int e, int r) { int s=M[{qq,w}]; if(s==0 || r<s) { M[{qq,w}]=r; q.push({qq,w}); } } void bfs() { while(!q.empty()) { a=q.front().first; b=q.front().second; q.pop(); c=d-a-b; x=M[{a,b}]; if(odp[a]==0) odp[a]=x; if(odp[b]==0) odp[b]=x; if(odp[c]==0) odp[c]=x; odp[a]=min(odp[a],x); odp[b]=min(odp[b],x); odp[c]=min(odp[c],x); ++x; y=przelej(a,B,b); ustaw(a-y,b+y,c,x); y=przelej(b,A,a); ustaw(a+y,b-y,c,x); y=przelej(a,C,c); ustaw(a-y,b,c+y,x); y=przelej(c,A,a); ustaw(a+y,b,c-y,x); y=przelej(b,C,c); ustaw(a,b-y,c+y,x); y=przelej(c,B,b); ustaw(a,b+y,c-y,x); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>A>>B>>C>>a>>b>>c; d=a+b+c; M[{a,b}]=1; q.push({a,b}); bfs(); for(int i=0; i<=C; ++i) cout<<odp[i]-1<<" "; return 0; } |