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
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#ifdef LOCAL
#define debug(...) __VA_ARGS__
#else
#define debug(...) {}
#endif
map<pair<int,int>, int> vis;
int wy[100001];
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int i;
    int l[3];
    int tab[3];
    for (i = 0; i < 3; i++) cin>>l[i];
    for (i = 0; i < 3; i++) cin>>tab[i];
    int suma = tab[0]+tab[1]+tab[2];
    queue<pair<int,int> > q;
    q.push({tab[0],tab[1]});
    vis[{tab[0],tab[1]}] = 1;
    int ile = 0;
    while (q.size() && ile < l[2]+1){
        int akt[3];
        akt[0] = q.front().first;
        akt[1] = q.front().second;
        akt[2] = suma-akt[0]-akt[1];
        int wynik = vis[{akt[0],akt[1]}];
        q.pop();
        for (int j = 0; j < 3 ; j++){
            if (!wy[akt[j]]){
                ile++;
                wy[akt[j]] = wynik;
            }
        }
        for (i = 0; i < 3; i++){
            for (int j = 0; j < 3; j++){
                if (i == j) continue;
                int cur[3];
                cur[0] = akt[0];
                cur[1] = akt[1];
                cur[2] = akt[2];
                cur[i] = max(0,akt[i]-(l[j]-akt[j]));
                cur[j] = min(l[j],akt[j]+akt[i]);
                if (!vis[{cur[0],cur[1]}]){
                    vis[{cur[0],cur[1]}] = wynik+1;
                    q.push({cur[0],cur[1]});
                }
            }
        }
    }
    for (i = 0; i < l[2]+1; i++) cout<<wy[i]-1<<" ";
    cout<<"\n";
    return 0;
}