#include <iostream> using namespace std; typedef struct { long a, b, c; long i; } zestaw; zestaw val[1000000]; long n, cur; //long ile; long but_a, but_b, but_c; short wynik[100001]; int szukaj(zestaw a) { for (long i = 0; i < n; i++) if (val[i].a == a.a && val[i].b == a.b && val[i].c == a.c) return 1; return 0; } int main() { zestaw z; long p; cin >> but_a >> but_b >> but_c; cin >> val[0].a >> val[0].b >> val[0].c; val[0].i = 1; n = 1; cur = 0; while (cur < n) { if (wynik[val[cur].a] == 0 || wynik[val[cur].a] > val[cur].i) wynik[val[cur].a] = val[cur].i; if (wynik[val[cur].b] == 0 || wynik[val[cur].b] > val[cur].i) wynik[val[cur].b] = val[cur].i; if (wynik[val[cur].c] == 0 || wynik[val[cur].c] > val[cur].i) wynik[val[cur].c] = val[cur].i; z.i = val[cur].i + 1; if (val[cur].a > 0 && val[cur].b < but_b) { p = (val[cur].a + val[cur].b <= but_b ? val[cur].a : but_b - val[cur].b); z.a = val[cur].a - p; z.b = val[cur].b + p; z.c = val[cur].c; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].a > 0 && val[cur].c < but_c) { p = (val[cur].a + val[cur].c <= but_c ? val[cur].a : but_c - val[cur].c); z.a = val[cur].a - p; z.b = val[cur].b; z.c = val[cur].c + p; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].b > 0 && val[cur].a < but_a) { p = (val[cur].b + val[cur].a <= but_a ? val[cur].b : but_a - val[cur].a); z.a = val[cur].a + p; z.b = val[cur].b - p; z.c = val[cur].c; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].b > 0 && val[cur].c < but_c) { p = (val[cur].b + val[cur].c <= but_c ? val[cur].b : but_c - val[cur].c); z.a = val[cur].a; z.b = val[cur].b - p; z.c = val[cur].c + p; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].c > 0 && val[cur].a < but_a) { p = (val[cur].c + val[cur].a <= but_a ? val[cur].c : but_a - val[cur].a); z.a = val[cur].a + p; z.b = val[cur].b; z.c = val[cur].c - p; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].c > 0 && val[cur].b < but_b) { p = (val[cur].c + val[cur].b <= but_b ? val[cur].c : but_b - val[cur].b); z.a = val[cur].a; z.b = val[cur].b + p; z.c = val[cur].c - p; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } cur++; } // przelewaj(akt, 1); for (long i = 0; i <= but_c; i++) cout << (wynik[i] - 1) << " "; return 0; }
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 | #include <iostream> using namespace std; typedef struct { long a, b, c; long i; } zestaw; zestaw val[1000000]; long n, cur; //long ile; long but_a, but_b, but_c; short wynik[100001]; int szukaj(zestaw a) { for (long i = 0; i < n; i++) if (val[i].a == a.a && val[i].b == a.b && val[i].c == a.c) return 1; return 0; } int main() { zestaw z; long p; cin >> but_a >> but_b >> but_c; cin >> val[0].a >> val[0].b >> val[0].c; val[0].i = 1; n = 1; cur = 0; while (cur < n) { if (wynik[val[cur].a] == 0 || wynik[val[cur].a] > val[cur].i) wynik[val[cur].a] = val[cur].i; if (wynik[val[cur].b] == 0 || wynik[val[cur].b] > val[cur].i) wynik[val[cur].b] = val[cur].i; if (wynik[val[cur].c] == 0 || wynik[val[cur].c] > val[cur].i) wynik[val[cur].c] = val[cur].i; z.i = val[cur].i + 1; if (val[cur].a > 0 && val[cur].b < but_b) { p = (val[cur].a + val[cur].b <= but_b ? val[cur].a : but_b - val[cur].b); z.a = val[cur].a - p; z.b = val[cur].b + p; z.c = val[cur].c; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].a > 0 && val[cur].c < but_c) { p = (val[cur].a + val[cur].c <= but_c ? val[cur].a : but_c - val[cur].c); z.a = val[cur].a - p; z.b = val[cur].b; z.c = val[cur].c + p; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].b > 0 && val[cur].a < but_a) { p = (val[cur].b + val[cur].a <= but_a ? val[cur].b : but_a - val[cur].a); z.a = val[cur].a + p; z.b = val[cur].b - p; z.c = val[cur].c; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].b > 0 && val[cur].c < but_c) { p = (val[cur].b + val[cur].c <= but_c ? val[cur].b : but_c - val[cur].c); z.a = val[cur].a; z.b = val[cur].b - p; z.c = val[cur].c + p; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].c > 0 && val[cur].a < but_a) { p = (val[cur].c + val[cur].a <= but_a ? val[cur].c : but_a - val[cur].a); z.a = val[cur].a + p; z.b = val[cur].b; z.c = val[cur].c - p; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } if (val[cur].c > 0 && val[cur].b < but_b) { p = (val[cur].c + val[cur].b <= but_b ? val[cur].c : but_b - val[cur].b); z.a = val[cur].a; z.b = val[cur].b + p; z.c = val[cur].c - p; if (!szukaj(z)) { val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++; } } cur++; } // przelewaj(akt, 1); for (long i = 0; i <= but_c; i++) cout << (wynik[i] - 1) << " "; return 0; } |