#include "bits/stdc++.h" // Ignacy Boehlke using namespace std; // XIII LO Szczecin template<class A, class B> ostream& operator << (ostream& os, const pair<A, B>& p) {return os << '{' << p.first << ", " << p.second << '}';} template<class T> auto operator << (ostream& os, const T& v) -> decltype(v.begin(), os) {os << '{';for (auto i : v) os << i << ", ";return os << '}';} #ifdef DEBUG #define D(x...) x #else #define D(x...) #endif #define LN(x) D(cerr << #x << ": " << x << ' ') #define LOG(x) D(cerr << #x << ": " << x << '\n') #define ssize(x) ((int)x.size()) #define FOR(a, b, c) for(int a = (b); a <= (c); ++a) #define REP(a, b) FOR(a, 0, b - 1) #define ALL(x) (x).begin(), (x).end() #define fi first #define se second using ll = long long; int main() { array<int, 3> lim, st; REP(i, 3) scanf("%d", &lim[i]); REP(i, 3) scanf("%d", &st[i]); vector<int> res(lim[2] + 1, -1); queue<pair<int, array<int, 3>>> Q; set<array<int, 3>> vis; Q.emplace(0, st); while (!Q.empty()) { auto [t, arr] = Q.front(); Q.pop(); REP(i, 3) if (res[arr[i]] == -1) res[arr[i]] = t; REP(a, 3) REP(b, 3) if (a != b) { array<int, 3> tmp = arr; if (tmp[a] <= lim[b] - tmp[b]) { tmp[b] += tmp[a]; tmp[a] = 0; } else { tmp[a] -= lim[b] - tmp[b]; tmp[b] = lim[b]; } if (!vis.count(tmp)) { vis.emplace(tmp); Q.emplace(t + 1, tmp); } } } REP(i, lim[2] + 1) printf("%d ", res[i]); putchar('\n'); }
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" // Ignacy Boehlke using namespace std; // XIII LO Szczecin template<class A, class B> ostream& operator << (ostream& os, const pair<A, B>& p) {return os << '{' << p.first << ", " << p.second << '}';} template<class T> auto operator << (ostream& os, const T& v) -> decltype(v.begin(), os) {os << '{';for (auto i : v) os << i << ", ";return os << '}';} #ifdef DEBUG #define D(x...) x #else #define D(x...) #endif #define LN(x) D(cerr << #x << ": " << x << ' ') #define LOG(x) D(cerr << #x << ": " << x << '\n') #define ssize(x) ((int)x.size()) #define FOR(a, b, c) for(int a = (b); a <= (c); ++a) #define REP(a, b) FOR(a, 0, b - 1) #define ALL(x) (x).begin(), (x).end() #define fi first #define se second using ll = long long; int main() { array<int, 3> lim, st; REP(i, 3) scanf("%d", &lim[i]); REP(i, 3) scanf("%d", &st[i]); vector<int> res(lim[2] + 1, -1); queue<pair<int, array<int, 3>>> Q; set<array<int, 3>> vis; Q.emplace(0, st); while (!Q.empty()) { auto [t, arr] = Q.front(); Q.pop(); REP(i, 3) if (res[arr[i]] == -1) res[arr[i]] = t; REP(a, 3) REP(b, 3) if (a != b) { array<int, 3> tmp = arr; if (tmp[a] <= lim[b] - tmp[b]) { tmp[b] += tmp[a]; tmp[a] = 0; } else { tmp[a] -= lim[b] - tmp[b]; tmp[b] = lim[b]; } if (!vis.count(tmp)) { vis.emplace(tmp); Q.emplace(t + 1, tmp); } } } REP(i, lim[2] + 1) printf("%d ", res[i]); putchar('\n'); } |