#include<bits/stdc++.h> #define ff first #define ss second #define mp make_pair #define pb push_back using namespace std; struct tri { int a,b,c; }; bool operator<(const tri &a,const tri &b) { return (a.a<b.a) || (a.a==b.a && a.b<b.b) || (a.a==b.a && a.b==b.b && a.c<b.c); } int main() { int A,B,C,a,b,c; scanf("%d%d%d%d%d%d",&A,&B,&C,&a,&b,&c); vector<int> wyn(C+1,1000000000); queue<tri> qq; map<tri,int> cost; tri beg={a,b,c}; qq.push(beg); cost[beg]=0; while(!qq.empty()) { tri x=qq.front(); qq.pop(); int co=cost[x]; vector<tri> pos; pos.pb({x.a-min(B-x.b,x.a),x.b+min(B-x.b,x.a),x.c}); pos.pb({x.a+min(A-x.a,x.b),x.b-min(A-x.a,x.b),x.c}); pos.pb({x.a,x.b-min(C-x.c,x.b),x.c+min(C-x.c,x.b)}); pos.pb({x.a,x.b+min(B-x.b,x.c),x.c-min(B-x.b,x.c)}); pos.pb({x.a-min(C-x.c,x.a),x.b,x.c+min(C-x.c,x.a)}); pos.pb({x.a+min(A-x.a,x.c),x.b,x.c-min(A-x.a,x.c)}); for(auto I : pos) { if(!cost.count(I)) { cost[I]=co+1; qq.push(I); } } } for(auto I : cost) { wyn[I.ff.a]=min(wyn[I.ff.a],I.ss); wyn[I.ff.b]=min(wyn[I.ff.b],I.ss); wyn[I.ff.c]=min(wyn[I.ff.c],I.ss); } for(int i=0;i<=C;++i) { if(wyn[i]!=1000000000) printf("%d ",wyn[i]); else printf("-1 "); } printf("\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 50 51 52 53 54 55 56 57 58 | #include<bits/stdc++.h> #define ff first #define ss second #define mp make_pair #define pb push_back using namespace std; struct tri { int a,b,c; }; bool operator<(const tri &a,const tri &b) { return (a.a<b.a) || (a.a==b.a && a.b<b.b) || (a.a==b.a && a.b==b.b && a.c<b.c); } int main() { int A,B,C,a,b,c; scanf("%d%d%d%d%d%d",&A,&B,&C,&a,&b,&c); vector<int> wyn(C+1,1000000000); queue<tri> qq; map<tri,int> cost; tri beg={a,b,c}; qq.push(beg); cost[beg]=0; while(!qq.empty()) { tri x=qq.front(); qq.pop(); int co=cost[x]; vector<tri> pos; pos.pb({x.a-min(B-x.b,x.a),x.b+min(B-x.b,x.a),x.c}); pos.pb({x.a+min(A-x.a,x.b),x.b-min(A-x.a,x.b),x.c}); pos.pb({x.a,x.b-min(C-x.c,x.b),x.c+min(C-x.c,x.b)}); pos.pb({x.a,x.b+min(B-x.b,x.c),x.c-min(B-x.b,x.c)}); pos.pb({x.a-min(C-x.c,x.a),x.b,x.c+min(C-x.c,x.a)}); pos.pb({x.a+min(A-x.a,x.c),x.b,x.c-min(A-x.a,x.c)}); for(auto I : pos) { if(!cost.count(I)) { cost[I]=co+1; qq.push(I); } } } for(auto I : cost) { wyn[I.ff.a]=min(wyn[I.ff.a],I.ss); wyn[I.ff.b]=min(wyn[I.ff.b],I.ss); wyn[I.ff.c]=min(wyn[I.ff.c],I.ss); } for(int i=0;i<=C;++i) { if(wyn[i]!=1000000000) printf("%d ",wyn[i]); else printf("-1 "); } printf("\n"); } |