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