#include<bits/stdc++.h>
#define ff first
#define ss second
#define mp make_pair
using namespace std;
constexpr int MAX_C = 100000;
int t[MAX_C];
int P[3], i[3],j[3];
map<pair<pair<int, int>, int>, int> m;
queue<pair<pair<int,int>,int> > q;
pair<pair<int,int>, int> i_k() {
return mp(mp(i[0],i[1]),i[2]);
}
pair<pair<int,int>, int> j_k() {
return mp(mp(j[0],j[1]),j[2]);
}
int main() {
scanf("%d%d%d", &P[0], &P[1], &P[2]);
scanf("%d%d%d", &i[0], &i[1], &i[2]);
q.push(i_k());
m[i_k()] = 1;
while(!q.empty()) {
i[0] = q.front().ff.ff;
i[1] = q.front().ff.ss;
i[2] = q.front().ss;
q.pop();
int st = m[i_k()];
for(int h = 0; h < 3; ++h) {
if(t[i[h]] <= 0) t[i[h]] = st;
j[h] = i[h];
}
for(int h = 0; h < 3; ++h) {
for(int g = 0; g < 3; ++g) {
if(h != g) {
int p = min(j[h], P[g] - j[g]);
j[h] -= p;
j[g] += p;
if(m[j_k()] <= 0) {
m[j_k()] = st+1;
q.push(j_k());
}
j[h] = i[h];
j[g] = i[g];
}
}
}
}
for(int h = 0; h <= P[2]; ++h) {
printf("%d ", t[h]-1);
}
printf("\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 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include<bits/stdc++.h> #define ff first #define ss second #define mp make_pair using namespace std; constexpr int MAX_C = 100000; int t[MAX_C]; int P[3], i[3],j[3]; map<pair<pair<int, int>, int>, int> m; queue<pair<pair<int,int>,int> > q; pair<pair<int,int>, int> i_k() { return mp(mp(i[0],i[1]),i[2]); } pair<pair<int,int>, int> j_k() { return mp(mp(j[0],j[1]),j[2]); } int main() { scanf("%d%d%d", &P[0], &P[1], &P[2]); scanf("%d%d%d", &i[0], &i[1], &i[2]); q.push(i_k()); m[i_k()] = 1; while(!q.empty()) { i[0] = q.front().ff.ff; i[1] = q.front().ff.ss; i[2] = q.front().ss; q.pop(); int st = m[i_k()]; for(int h = 0; h < 3; ++h) { if(t[i[h]] <= 0) t[i[h]] = st; j[h] = i[h]; } for(int h = 0; h < 3; ++h) { for(int g = 0; g < 3; ++g) { if(h != g) { int p = min(j[h], P[g] - j[g]); j[h] -= p; j[g] += p; if(m[j_k()] <= 0) { m[j_k()] = st+1; q.push(j_k()); } j[h] = i[h]; j[g] = i[g]; } } } } for(int h = 0; h <= P[2]; ++h) { printf("%d ", t[h]-1); } printf("\n"); } |
English