#include <bits/stdc++.h>
using namespace std;
constexpr int MAX_C = 1e5 + 7;
int ans[MAX_C];
bool Check(int x, int X, int y, int Y)
{
if (x != 0 and y < Y) return true;
return false;
}
int main()
{
ios_base::sync_with_stdio(false), cin.tie(NULL);
for (int i = 0; i < MAX_C; ++i) ans[i] = -1;
int A, B, C, a, b, c;
cin >> A >> B >> C >> a >> b >> c;
vector<int> butelki_pop[3];
butelki_pop[0].push_back(a);
butelki_pop[1].push_back(b);
butelki_pop[2].push_back(c);
ans[a] = ans[b] = ans[c] = 0;
int ile_operacji = 1;
bool zatrzymaj;
while(ile_operacji <= 10)
{
vector<int> butelki_act[3];
int rozmiar = butelki_pop[0].size();
for (int i = 0; i < rozmiar; ++i)
{
if (Check(butelki_pop[0][i], A, butelki_pop[1][i], B))
{
butelki_act[0].push_back(butelki_pop[0][i] - min(butelki_pop[0][i], B - butelki_pop[1][i]));
butelki_act[1].push_back(min(butelki_pop[0][i] + butelki_pop[1][i], B));
butelki_act[2].push_back(butelki_pop[2][i]);
if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji;
if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji;
if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji;
}
if (Check(butelki_pop[1][i], B, butelki_pop[0][i], A))
{
butelki_act[0].push_back(min(butelki_pop[0][i] + butelki_pop[1][i], A));
butelki_act[1].push_back(butelki_pop[1][i] - min(butelki_pop[1][i], A - butelki_pop[0][i]));
butelki_act[2].push_back(butelki_pop[2][i]);
if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji;
if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji;
if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji;
}
if (Check(butelki_pop[1][i], B, butelki_pop[2][i], C))
{
butelki_act[0].push_back(butelki_pop[0][i]);
butelki_act[1].push_back(butelki_pop[1][i] - min(butelki_pop[1][i], C - butelki_pop[2][i]));
butelki_act[2].push_back(min(butelki_pop[1][i] + butelki_pop[2][i], C));
if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji;
if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji;
if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji;
}
if (Check(butelki_pop[2][i], C, butelki_pop[1][i], B))
{
butelki_act[0].push_back(butelki_pop[0][i]);
butelki_act[1].push_back(min(butelki_pop[1][i] + butelki_pop[2][i], B));
butelki_act[2].push_back(butelki_pop[2][i] - min(butelki_pop[2][i], B - butelki_pop[1][i]));
if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji;
if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji;
if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji;
}
if (Check(butelki_pop[2][i], C, butelki_pop[0][i], A))
{
butelki_act[0].push_back(min(butelki_pop[0][i] + butelki_pop[2][i], A));
butelki_act[1].push_back(butelki_pop[1][i]);
butelki_act[2].push_back(butelki_pop[2][i] - min(butelki_pop[2][i], A - butelki_pop[0][i]));
if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji;
if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji;
if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji;
}
if (Check(butelki_pop[0][i], A, butelki_pop[2][i], C))
{
butelki_act[0].push_back(butelki_pop[0][i] - min(butelki_pop[0][i], C - butelki_pop[2][i]));
butelki_act[1].push_back(butelki_pop[1][i]);
butelki_act[2].push_back(min(butelki_pop[0][i] + butelki_pop[2][i], C));
if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji;
if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji;
if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji;
}
zatrzymaj = true;
for (int j = 0; j <= min(C, a+b+c); ++j)
{
if (ans[j] == -1)
{
zatrzymaj = false;
break;
}
}
if (zatrzymaj) break;
}
if (zatrzymaj) break;
for (int i = 0; i < 3; ++i)
{
butelki_pop[i] = butelki_act[i];
}
++ile_operacji;
}
for (int i = 0; i <= C; ++i)
{
cout << ans[i] << ' ';
}
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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #include <bits/stdc++.h> using namespace std; constexpr int MAX_C = 1e5 + 7; int ans[MAX_C]; bool Check(int x, int X, int y, int Y) { if (x != 0 and y < Y) return true; return false; } int main() { ios_base::sync_with_stdio(false), cin.tie(NULL); for (int i = 0; i < MAX_C; ++i) ans[i] = -1; int A, B, C, a, b, c; cin >> A >> B >> C >> a >> b >> c; vector<int> butelki_pop[3]; butelki_pop[0].push_back(a); butelki_pop[1].push_back(b); butelki_pop[2].push_back(c); ans[a] = ans[b] = ans[c] = 0; int ile_operacji = 1; bool zatrzymaj; while(ile_operacji <= 10) { vector<int> butelki_act[3]; int rozmiar = butelki_pop[0].size(); for (int i = 0; i < rozmiar; ++i) { if (Check(butelki_pop[0][i], A, butelki_pop[1][i], B)) { butelki_act[0].push_back(butelki_pop[0][i] - min(butelki_pop[0][i], B - butelki_pop[1][i])); butelki_act[1].push_back(min(butelki_pop[0][i] + butelki_pop[1][i], B)); butelki_act[2].push_back(butelki_pop[2][i]); if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji; if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji; if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji; } if (Check(butelki_pop[1][i], B, butelki_pop[0][i], A)) { butelki_act[0].push_back(min(butelki_pop[0][i] + butelki_pop[1][i], A)); butelki_act[1].push_back(butelki_pop[1][i] - min(butelki_pop[1][i], A - butelki_pop[0][i])); butelki_act[2].push_back(butelki_pop[2][i]); if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji; if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji; if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji; } if (Check(butelki_pop[1][i], B, butelki_pop[2][i], C)) { butelki_act[0].push_back(butelki_pop[0][i]); butelki_act[1].push_back(butelki_pop[1][i] - min(butelki_pop[1][i], C - butelki_pop[2][i])); butelki_act[2].push_back(min(butelki_pop[1][i] + butelki_pop[2][i], C)); if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji; if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji; if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji; } if (Check(butelki_pop[2][i], C, butelki_pop[1][i], B)) { butelki_act[0].push_back(butelki_pop[0][i]); butelki_act[1].push_back(min(butelki_pop[1][i] + butelki_pop[2][i], B)); butelki_act[2].push_back(butelki_pop[2][i] - min(butelki_pop[2][i], B - butelki_pop[1][i])); if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji; if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji; if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji; } if (Check(butelki_pop[2][i], C, butelki_pop[0][i], A)) { butelki_act[0].push_back(min(butelki_pop[0][i] + butelki_pop[2][i], A)); butelki_act[1].push_back(butelki_pop[1][i]); butelki_act[2].push_back(butelki_pop[2][i] - min(butelki_pop[2][i], A - butelki_pop[0][i])); if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji; if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji; if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji; } if (Check(butelki_pop[0][i], A, butelki_pop[2][i], C)) { butelki_act[0].push_back(butelki_pop[0][i] - min(butelki_pop[0][i], C - butelki_pop[2][i])); butelki_act[1].push_back(butelki_pop[1][i]); butelki_act[2].push_back(min(butelki_pop[0][i] + butelki_pop[2][i], C)); if (ans[butelki_act[0].back()] == -1) ans[butelki_act[0].back()] = ile_operacji; if (ans[butelki_act[1].back()] == -1) ans[butelki_act[1].back()] = ile_operacji; if (ans[butelki_act[2].back()] == -1) ans[butelki_act[2].back()] = ile_operacji; } zatrzymaj = true; for (int j = 0; j <= min(C, a+b+c); ++j) { if (ans[j] == -1) { zatrzymaj = false; break; } } if (zatrzymaj) break; } if (zatrzymaj) break; for (int i = 0; i < 3; ++i) { butelki_pop[i] = butelki_act[i]; } ++ile_operacji; } for (int i = 0; i <= C; ++i) { cout << ans[i] << ' '; } return 0; } |
English