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
#include <bits/stdc++.h>
using namespace std;
const long long H1=1e10+100, H2=1e5+10, INF=0x3f3f3f3f;
long long hsh(int a, int b, int c)
{
	return H1*a + H2*b + c;
}
unordered_set<long long>zbior;
int odp[H2];
struct typ{
	int a, b, c, t;
};
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	memset(odp, 0x3f, sizeof(odp));
	int v[3], p[3], t;
	cin>>v[0]>>v[1]>>v[2]>>p[0]>>p[1]>>p[2];
	queue<typ>kol;
	kol.push({p[0], p[1], p[2], 0});
	while (!kol.empty())
	{
		p[0]=kol.front().a;
		p[1]=kol.front().b;
		p[2]=kol.front().c;
		t=kol.front().t;
		kol.pop();
		if (!zbior.insert(hsh(p[0], p[1], p[2])).second)	continue;
		odp[p[0]]=min(odp[p[0]], t);
		odp[p[1]]=min(odp[p[1]], t);
		odp[p[2]]=min(odp[p[2]], t);
		for (int i=0; i<3; i++)
		{
			for (int j=0; j<3; j++)
			{
				if (i == j)	continue;
				int r=min(p[i], v[j]-p[j]);
				p[i]-=r;	p[j]+=r;
				kol.push({p[0], p[1], p[2], t+1});
				p[i]+=r;	p[j]-=r;
			}
		}
	}
	for (int i=0; i<=v[2]; i++)
	{
		cout<<(odp[i]==INF? -1 : odp[i])<<" ";
	}
}
/*
90007 90011 90017
50000 60000 70000
*/