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
77
78
79
80
81
82
83
84
85
86
#include <bits/stdc++.h>
using namespace std;

constexpr int MAXN = 1e5;

struct Event{
    int a;
    int b;
    int c;
    int cnt;
};
int A,B,C,rab,rba,rac,rca,rbc,rcb;
int AA[MAXN+10], BB[MAXN+10], CC[MAXN+10];


int reszta(int E, int k, int l);
void przelej(int a,int b,int c,int cnt);
queue<Event> kolejka;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int a,b,c,m;

    cin>>A>>B>>C>>a>>b>>c;

    for(int i=0;i<=MAXN;++i){
        AA[i]=INT_MAX;
        BB[i]=INT_MAX;
        CC[i]=INT_MAX;
    }

    kolejka.push({a,b,c,0});
    while(!kolejka.empty()){
        auto [a,b,c,cnt] = kolejka.front();
        kolejka.pop();
        przelej(a,b,c,cnt);
    }


    for(int i=0;i<=C;++i){
        m=min(min(AA[i],BB[i]),CC[i]);
        cout<< ( m==INT_MAX ? -1 : m) <<" ";
    }

    return 0;
}

void przelej(int a,int b,int c,int cnt){
    AA[a]=min(AA[a],cnt);
    BB[b]=min(BB[b],cnt);
    CC[c]=min(CC[c],cnt);

    rab=reszta(B,a,b);
    rba=reszta(A,a,b);
    rac=reszta(C,a,c);
    rca=reszta(A,a,c);
    rbc=reszta(C,b,c);
    rcb=reszta(B,b,c);


//    cout<<rab<<" "<<rba<<" "<<rac<<" "<<rca<<" "<<rbc<<" "<<rcb<<"\n";
    if(BB[a+b-rab]==INT_MAX || AA[rab]==INT_MAX)
        kolejka.push({rab,a+b-rab,c,cnt+1});
    if(AA[a+b-rba]==INT_MAX || BB[rba]==INT_MAX)
        kolejka.push({a+b-rba,rba,c,cnt+1});

    if(CC[a+c-rac]==INT_MAX || AA[rac]==INT_MAX)
        kolejka.push({rac,b,a+c-rac,cnt+1});
    if(AA[a+c-rca]==INT_MAX || CC[rca]==INT_MAX)
        kolejka.push({a+c-rca,b,rca,cnt+1});

    if(BB[b+c-rcb]==INT_MAX || CC[rcb]==INT_MAX)
        kolejka.push({a,b+c-rcb,rcb,cnt+1});
    if(CC[b+c-rbc]==INT_MAX || BB[rbc]==INT_MAX)
        kolejka.push({a,rbc,b+c-rbc,cnt+1});
}

int reszta(int E, int k, int l){
    if(k+l-E<0)
        return 0;
    else
        return k+l-E;
}