#include <bits/stdc++.h>
#define ll long long
#define mp make_pair
#define fi first
#define se second
#define pb push_back
#define pi pair<int, int>
#define vi vector<int>
#define mod 1000000007
template<typename T> bool chkmin(T &a, T b){return (b < a) ? a = b, 1 : 0;}
template<typename T> bool chkmax(T &a, T b){return (b > a) ? a = b, 1 : 0;}
ll ksm(ll a, ll b) {if (b == 0) return 1; ll ns = ksm(a, b >> 1); ns = ns * ns % mod; if (b & 1) ns = ns * a % mod; return ns;}
using namespace std;
#define ar3 array<int, 3>
const int maxn = 2e6 + 5;
ar3 a;
ar3 b;
map<ar3, int> r;
ar3 q[maxn];
int fr, ed;
int ans[maxn];
int main() {
for (int i = 0; i < maxn; i++)
ans[i] = 1e9;
for (int i = 0; i < 3; i++)
cin >> a[i];
for (int i = 0; i < 3; i++)
cin >> b[i];
q[ed++] = b; r[b] = 0;
while (fr < ed) {
ar3 x = q[fr++];
int cd = r[x];
for (int j = 0; j < 3; j++)
chkmin(ans[x[j]], cd);
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
if (i == j) continue;
int tot = x[i] + x[j];
for (int g = 0; g < 2; g++) {
ar3 nx = x;
nx[i] = g * a[i];
nx[j] = tot - nx[i];
if (nx[j] < 0 || nx[j] > a[j]) continue;
if (!r.count(nx))
r[nx] = cd + 1, q[ed++] = nx;
}
}
}
for (int i = 0; i <= a[2]; i++) {
if (ans[i] > 1e8) ans[i] = -1;
printf("%d ", ans[i]);
}
return (0-0); // <3 cxr
}
/*
5
1 2
1 1
1 4
1 5
1 1*/
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 | #include <bits/stdc++.h> #define ll long long #define mp make_pair #define fi first #define se second #define pb push_back #define pi pair<int, int> #define vi vector<int> #define mod 1000000007 template<typename T> bool chkmin(T &a, T b){return (b < a) ? a = b, 1 : 0;} template<typename T> bool chkmax(T &a, T b){return (b > a) ? a = b, 1 : 0;} ll ksm(ll a, ll b) {if (b == 0) return 1; ll ns = ksm(a, b >> 1); ns = ns * ns % mod; if (b & 1) ns = ns * a % mod; return ns;} using namespace std; #define ar3 array<int, 3> const int maxn = 2e6 + 5; ar3 a; ar3 b; map<ar3, int> r; ar3 q[maxn]; int fr, ed; int ans[maxn]; int main() { for (int i = 0; i < maxn; i++) ans[i] = 1e9; for (int i = 0; i < 3; i++) cin >> a[i]; for (int i = 0; i < 3; i++) cin >> b[i]; q[ed++] = b; r[b] = 0; while (fr < ed) { ar3 x = q[fr++]; int cd = r[x]; for (int j = 0; j < 3; j++) chkmin(ans[x[j]], cd); for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) { if (i == j) continue; int tot = x[i] + x[j]; for (int g = 0; g < 2; g++) { ar3 nx = x; nx[i] = g * a[i]; nx[j] = tot - nx[i]; if (nx[j] < 0 || nx[j] > a[j]) continue; if (!r.count(nx)) r[nx] = cd + 1, q[ed++] = nx; } } } for (int i = 0; i <= a[2]; i++) { if (ans[i] > 1e8) ans[i] = -1; printf("%d ", ans[i]); } return (0-0); // <3 cxr } /* 5 1 2 1 1 1 4 1 5 1 1*/ |
English