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
#include <bits/stdc++.h>

using namespace std;

struct butelki{
    int a,b,c,kroki;
};

bool operator < (butelki a,butelki b){
    if(a.kroki>b.kroki) return 1;
    return 0;
};

priority_queue <butelki> kol;

butelki start,a,pom;
set <pair<int,int>> s;
int aw,bw,cw,prze;
int odp[100001];

int main()
{
    scanf("%d %d %d",&aw,&bw,&cw);
    scanf("%d %d %d",&start.a,&start.b,&start.c);
    start.kroki=0;
    kol.push(start);
    for(int i=0;i<=cw;i++){
        odp[i]=1000000000;
    }
    while(kol.empty()==0){
        a=kol.top();
        kol.pop();
        if(s.count(make_pair(a.a,a.b))==0){
            s.insert(make_pair(a.a,a.b));
            odp[a.a]=min(odp[a.a],a.kroki);
            odp[a.b]=min(odp[a.b],a.kroki);
            odp[a.c]=min(odp[a.c],a.kroki);
            prze=min(a.a,bw-a.b);
            pom.kroki=a.kroki+1;
            pom.a=a.a-prze;
            pom.b=a.b+prze;
            pom.c=a.c;
            kol.push(pom);
            prze=min(a.a,cw-a.c);
            pom.a=a.a-prze;
            pom.c=a.c+prze;
            pom.b=a.b;
            kol.push(pom);
            prze=min(a.b,aw-a.a);
            pom.a=a.a+prze;
            pom.b=a.b-prze;
            pom.c=a.c;
            kol.push(pom);
            prze=min(a.b,cw-a.c);
            pom.a=a.a;
            pom.b=a.b-prze;
            pom.c=a.c+prze;
            kol.push(pom);
            prze=min(a.c,aw-a.a);
            pom.a=a.a+prze;
            pom.b=a.b;
            pom.c=a.c-prze;
            kol.push(pom);
            prze=min(a.c,bw-a.b);
            pom.a=a.a;
            pom.b=a.b+prze;
            pom.c=a.c-prze;
            kol.push(pom);
        }
    }
    for(int i=0;i<=cw;i++){
        if(odp[i]==1000000000){
            printf("-1 ");
        }else{
            printf("%d ",odp[i]);
        }
    }
    return 0;
}