//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; } |
English