#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define f first
#define s second
#define sz(s) (int)s.size()
#define all(s) s.begin(), s.end()
#define vi vector<int>
#define ii pair<int,int>
#define vii vector<ii>
#define vvi vector<vi>
#define ll long long
template<class T> istream & operator >> (istream&is, vector<T> & vec){ for(T & el : vec) is >> el; return is; }
const int N = 1e6 + 7;
int n;
int DP[N];
void solve(){
for(int i = 0; i < N; i++)
DP[i] = -1;
vi start(3), stan(3);
cin >> start >> stan;
map<vi, int> dist;
dist[start] = 0;
queue<vi> kol;
kol.push(stan);
while(sz(kol)){
vi stan = kol.front();
kol.pop();
for(int i = 0; i < 3; i++)
if(DP[stan[i]] == -1)
DP[stan[i]] = dist[stan];
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
if(i == j)
continue;
int przel = min(stan[i], start[j] - stan[j]);
vi nowy_stan = stan;
nowy_stan[i] -= przel;
nowy_stan[j] += przel;
if(not dist.count(nowy_stan)){
dist[nowy_stan] = dist[stan] + 1;
kol.push(nowy_stan);
}
}
}
}
for(int i = 0; i <= start[2]; i++)
cout << DP[i] << ' ';
cout << '\n';
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int testy = 1;
// cin >> testy;
while(testy--)
solve();
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 | #include<bits/stdc++.h> using namespace std; #define pb push_back #define f first #define s second #define sz(s) (int)s.size() #define all(s) s.begin(), s.end() #define vi vector<int> #define ii pair<int,int> #define vii vector<ii> #define vvi vector<vi> #define ll long long template<class T> istream & operator >> (istream&is, vector<T> & vec){ for(T & el : vec) is >> el; return is; } const int N = 1e6 + 7; int n; int DP[N]; void solve(){ for(int i = 0; i < N; i++) DP[i] = -1; vi start(3), stan(3); cin >> start >> stan; map<vi, int> dist; dist[start] = 0; queue<vi> kol; kol.push(stan); while(sz(kol)){ vi stan = kol.front(); kol.pop(); for(int i = 0; i < 3; i++) if(DP[stan[i]] == -1) DP[stan[i]] = dist[stan]; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ if(i == j) continue; int przel = min(stan[i], start[j] - stan[j]); vi nowy_stan = stan; nowy_stan[i] -= przel; nowy_stan[j] += przel; if(not dist.count(nowy_stan)){ dist[nowy_stan] = dist[stan] + 1; kol.push(nowy_stan); } } } } for(int i = 0; i <= start[2]; i++) cout << DP[i] << ' '; cout << '\n'; } int main(){ ios::sync_with_stdio(0); cin.tie(0); int testy = 1; // cin >> testy; while(testy--) solve(); return 0; } |
English