#include<bits/stdc++.h> using namespace std; typedef long long int ll; const int N = 100007; const int inf = 1000000007; unordered_map<ll, bool> M; int odp[N], TAB[3]; int A, B, C; struct stan{ int a, b, c, x; }; queue<stan> q; bool bylo(int a, int b) { ll x=inf; x=(a*x+b); bool czy=M[x]; if(!czy) M[x]=1; return czy; } void policz() { while(!q.empty()) { int a=q.front().a, b=q.front().b, c=q.front().c, x=q.front().x; q.pop(); int tab[3]={a, b, c}, tab2[3]={a, b, c}; if(bylo(a, b)) continue; for(int i=0; i<3; i++) { int d = tab[i]; odp[d]=min(odp[d], x); } for(int i=0; i<3; i++) for(int j=0; j<3; j++) { if(i==j) continue; if(tab[i]+tab[j]<=TAB[j]) { tab2[i]=0; tab2[j]=tab[i]+tab[j]; q.push({tab2[0], tab2[1], tab2[2], x+1}); } else { tab2[i]=tab[i]+tab[j]-TAB[j]; tab2[j]=TAB[j]; q.push({tab2[0], tab2[1], tab2[2], x+1}); } for(int k=0; k<3; k++) tab2[k]=tab[k]; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int a, b, c; cin>>A>>B>>C>>a>>b>>c; for(int i=0; i<=C; i++) odp[i]=inf; TAB[0]=A; TAB[1]=B; TAB[2]=C; q.push({a, b, c, 0}); policz(); for(int i=0; i<=C; i++) { if(odp[i]==inf) cout<<"-1 "; else cout<<odp[i]<<" "; } }
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 | #include<bits/stdc++.h> using namespace std; typedef long long int ll; const int N = 100007; const int inf = 1000000007; unordered_map<ll, bool> M; int odp[N], TAB[3]; int A, B, C; struct stan{ int a, b, c, x; }; queue<stan> q; bool bylo(int a, int b) { ll x=inf; x=(a*x+b); bool czy=M[x]; if(!czy) M[x]=1; return czy; } void policz() { while(!q.empty()) { int a=q.front().a, b=q.front().b, c=q.front().c, x=q.front().x; q.pop(); int tab[3]={a, b, c}, tab2[3]={a, b, c}; if(bylo(a, b)) continue; for(int i=0; i<3; i++) { int d = tab[i]; odp[d]=min(odp[d], x); } for(int i=0; i<3; i++) for(int j=0; j<3; j++) { if(i==j) continue; if(tab[i]+tab[j]<=TAB[j]) { tab2[i]=0; tab2[j]=tab[i]+tab[j]; q.push({tab2[0], tab2[1], tab2[2], x+1}); } else { tab2[i]=tab[i]+tab[j]-TAB[j]; tab2[j]=TAB[j]; q.push({tab2[0], tab2[1], tab2[2], x+1}); } for(int k=0; k<3; k++) tab2[k]=tab[k]; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int a, b, c; cin>>A>>B>>C>>a>>b>>c; for(int i=0; i<=C; i++) odp[i]=inf; TAB[0]=A; TAB[1]=B; TAB[2]=C; q.push({a, b, c, 0}); policz(); for(int i=0; i<=C; i++) { if(odp[i]==inf) cout<<"-1 "; else cout<<odp[i]<<" "; } } |