#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; } |