#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#ifdef LOCAL
#define debug(...) __VA_ARGS__
#else
#define debug(...) {}
#endif
map<pair<int,int>, int> vis;
int wy[100001];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int i;
int l[3];
int tab[3];
for (i = 0; i < 3; i++) cin>>l[i];
for (i = 0; i < 3; i++) cin>>tab[i];
int suma = tab[0]+tab[1]+tab[2];
queue<pair<int,int> > q;
q.push({tab[0],tab[1]});
vis[{tab[0],tab[1]}] = 1;
int ile = 0;
while (q.size() && ile < l[2]+1){
int akt[3];
akt[0] = q.front().first;
akt[1] = q.front().second;
akt[2] = suma-akt[0]-akt[1];
int wynik = vis[{akt[0],akt[1]}];
q.pop();
for (int j = 0; j < 3 ; j++){
if (!wy[akt[j]]){
ile++;
wy[akt[j]] = wynik;
}
}
for (i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
if (i == j) continue;
int cur[3];
cur[0] = akt[0];
cur[1] = akt[1];
cur[2] = akt[2];
cur[i] = max(0,akt[i]-(l[j]-akt[j]));
cur[j] = min(l[j],akt[j]+akt[i]);
if (!vis[{cur[0],cur[1]}]){
vis[{cur[0],cur[1]}] = wynik+1;
q.push({cur[0],cur[1]});
}
}
}
}
for (i = 0; i < l[2]+1; i++) cout<<wy[i]-1<<" ";
cout<<"\n";
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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; #ifdef LOCAL #define debug(...) __VA_ARGS__ #else #define debug(...) {} #endif map<pair<int,int>, int> vis; int wy[100001]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int i; int l[3]; int tab[3]; for (i = 0; i < 3; i++) cin>>l[i]; for (i = 0; i < 3; i++) cin>>tab[i]; int suma = tab[0]+tab[1]+tab[2]; queue<pair<int,int> > q; q.push({tab[0],tab[1]}); vis[{tab[0],tab[1]}] = 1; int ile = 0; while (q.size() && ile < l[2]+1){ int akt[3]; akt[0] = q.front().first; akt[1] = q.front().second; akt[2] = suma-akt[0]-akt[1]; int wynik = vis[{akt[0],akt[1]}]; q.pop(); for (int j = 0; j < 3 ; j++){ if (!wy[akt[j]]){ ile++; wy[akt[j]] = wynik; } } for (i = 0; i < 3; i++){ for (int j = 0; j < 3; j++){ if (i == j) continue; int cur[3]; cur[0] = akt[0]; cur[1] = akt[1]; cur[2] = akt[2]; cur[i] = max(0,akt[i]-(l[j]-akt[j])); cur[j] = min(l[j],akt[j]+akt[i]); if (!vis[{cur[0],cur[1]}]){ vis[{cur[0],cur[1]}] = wynik+1; q.push({cur[0],cur[1]}); } } } } for (i = 0; i < l[2]+1; i++) cout<<wy[i]-1<<" "; cout<<"\n"; return 0; } |
English