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
#include <bits/stdc++.h>
using namespace std;
const int mx=1e5+5;
set<pair<int,int>>odw;
vector<pair<pair<int,int>,int>>kolejka;
int ma,mb,mc,a,b,c,suma;
int x,y,z,t;
int przel_x_y,przel_x_z,przel_y_x,przel_y_z,przel_z_x,przel_z_y;
int dp[mx];
inline void dodaj(int nx,int ny,int nt){
    auto it=odw.find({nx,ny});
    if(it==odw.end())kolejka.push_back({{nx,ny},nt});
}
int main(){
    ios::sync_with_stdio(false);
    cin>>ma>>mb>>mc>>a>>b>>c;
    suma=a+b+c;
    for(int i=0;i<=mc;++i){
        dp[i]=INT_MAX;
    }
    kolejka.push_back({{a,b},0});
    for(int i=0;i<kolejka.size();++i){
        int x=kolejka[i].first.first;
        int y=kolejka[i].first.second;
        int t=kolejka[i].second;
        odw.insert({x,y});
        int z=suma-x-y;
        dp[x]=min(dp[x],t);
        dp[y]=min(dp[y],t);
        dp[z]=min(dp[z],t);
        przel_x_y=min(x,mb-y);
        przel_x_z=min(x,mc-z);
        przel_y_x=min(y,ma-x);
        przel_y_z=min(y,mc-z);
        przel_z_x=min(z,ma-x);
        przel_z_y=min(z,mb-y);
        dodaj(x-przel_x_y,y+przel_x_y,t+1);
        dodaj(x-przel_x_z,y,t+1);
        dodaj(x+przel_y_x,y-przel_y_x,t+1);
        dodaj(x,y-przel_y_z,t+1);
        dodaj(x+przel_z_x,y,t+1);
        dodaj(x,y+przel_z_y,t+1);
    }
    for(int i=0;i<=mc;++i){
        if(dp[i]==INT_MAX)cout<<-1<<" ";
        else cout<<dp[i]<<" ";
    }
    return 0;
}