#include <bits/stdc++.h> #define int long long #define mp make_pair #define pb push_back #define ld long double #define pii pair<int,int> #define sz(x) (int)x.size() #define piii pair<pii,pii> #define precise cout<<fixed<<setprecision(10) #define st first #define nd second #define ins insert #define vi vector<int> #define BOOST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0) using namespace std; map<pair<pii,int>,bool>O; map<pair<pii,int>,int>dp; const int MAX=1e5+5; const int inf=1e18+9; int ans[MAX]; int32_t main(){ BOOST; int A[3],a[3]; for (int i=0;i<3;i++)cin>>A[i]; for (int i=0;i<3;i++)cin>>a[i]; for (int i=0;i<=A[2];i++)ans[i]=inf; queue<pair<pii,int>>q; O[{{a[0],a[1]},a[2]}]=true; q.push(mp(mp(a[0],a[1]),a[2])); while (!q.empty()){ pair<pii,int>akt=q.front(); q.pop(); int tab[3]={akt.st.st,akt.st.nd,akt.nd}; ans[akt.st.st]=min(ans[akt.st.st],dp[akt]); ans[akt.st.nd]=min(ans[akt.st.nd],dp[akt]); ans[akt.nd]=min(ans[akt.nd],dp[akt]); for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ if (i==j)continue; int przelewam=min(tab[i],A[j]-tab[j]); int tab2[3]={tab[0],tab[1],tab[2]}; tab2[i]-=przelewam; tab2[j]+=przelewam; pair<pii,int>wrzut={{tab2[0],tab2[1]},tab2[2]}; if (!O[wrzut]){ dp[wrzut]=dp[akt]+1; O[wrzut]=true; q.push(wrzut); } } } } for (int i=0;i<=A[2];i++){ if (ans[i]==inf)cout<<"-1 "; else cout<<ans[i]<<" "; } 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 | #include <bits/stdc++.h> #define int long long #define mp make_pair #define pb push_back #define ld long double #define pii pair<int,int> #define sz(x) (int)x.size() #define piii pair<pii,pii> #define precise cout<<fixed<<setprecision(10) #define st first #define nd second #define ins insert #define vi vector<int> #define BOOST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0) using namespace std; map<pair<pii,int>,bool>O; map<pair<pii,int>,int>dp; const int MAX=1e5+5; const int inf=1e18+9; int ans[MAX]; int32_t main(){ BOOST; int A[3],a[3]; for (int i=0;i<3;i++)cin>>A[i]; for (int i=0;i<3;i++)cin>>a[i]; for (int i=0;i<=A[2];i++)ans[i]=inf; queue<pair<pii,int>>q; O[{{a[0],a[1]},a[2]}]=true; q.push(mp(mp(a[0],a[1]),a[2])); while (!q.empty()){ pair<pii,int>akt=q.front(); q.pop(); int tab[3]={akt.st.st,akt.st.nd,akt.nd}; ans[akt.st.st]=min(ans[akt.st.st],dp[akt]); ans[akt.st.nd]=min(ans[akt.st.nd],dp[akt]); ans[akt.nd]=min(ans[akt.nd],dp[akt]); for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ if (i==j)continue; int przelewam=min(tab[i],A[j]-tab[j]); int tab2[3]={tab[0],tab[1],tab[2]}; tab2[i]-=przelewam; tab2[j]+=przelewam; pair<pii,int>wrzut={{tab2[0],tab2[1]},tab2[2]}; if (!O[wrzut]){ dp[wrzut]=dp[akt]+1; O[wrzut]=true; q.push(wrzut); } } } } for (int i=0;i<=A[2];i++){ if (ans[i]==inf)cout<<"-1 "; else cout<<ans[i]<<" "; } return 0; } |