#include <bits/stdc++.h> using namespace std; vector<int>A, a, res; map<vector<int>, int>odl; void BFSnaSterydach() { queue<vector<int> > Q; Q.push(a); while(!Q.empty()) { vector<int> v=Q.front(), u; Q.pop(); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { u=v; if(j!=i) { if(v[i]+v[j]<=A[i]) { u[i]=v[i]+v[j]; u[j]=0; } else { u[i]=A[i]; u[j]=v[i]+v[j]-A[i]; } if(odl.find(u)==odl.end()) { odl[u]=odl[v]+1; for(int s=0;s<3;s++) { if(res[u[s]]>odl[u])res[u[s]]=odl[u]; } Q.push(u); } } } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); for(int i=0;i<3;i++) { int x; cin>>x; A.push_back(x); } res.assign(A[2]+1, INT_MAX); for(int i=0;i<3;i++) { int x; cin>>x; a.push_back(x); } odl[a]=0; for(int i=0;i<3;i++)res[a[i]]=0; BFSnaSterydach(); for(int i=0;i<=A[2];i++) { if(res[i]==INT_MAX)cout<<"-1"<<" "; else cout<<res[i]<<' '; } 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 | #include <bits/stdc++.h> using namespace std; vector<int>A, a, res; map<vector<int>, int>odl; void BFSnaSterydach() { queue<vector<int> > Q; Q.push(a); while(!Q.empty()) { vector<int> v=Q.front(), u; Q.pop(); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { u=v; if(j!=i) { if(v[i]+v[j]<=A[i]) { u[i]=v[i]+v[j]; u[j]=0; } else { u[i]=A[i]; u[j]=v[i]+v[j]-A[i]; } if(odl.find(u)==odl.end()) { odl[u]=odl[v]+1; for(int s=0;s<3;s++) { if(res[u[s]]>odl[u])res[u[s]]=odl[u]; } Q.push(u); } } } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); for(int i=0;i<3;i++) { int x; cin>>x; A.push_back(x); } res.assign(A[2]+1, INT_MAX); for(int i=0;i<3;i++) { int x; cin>>x; a.push_back(x); } odl[a]=0; for(int i=0;i<3;i++)res[a[i]]=0; BFSnaSterydach(); for(int i=0;i<=A[2];i++) { if(res[i]==INT_MAX)cout<<"-1"<<" "; else cout<<res[i]<<' '; } return 0; } |