Cod sursa(job #2627691)

Utilizator mariamirabella2Bucur-Sabau Maria-Mirabela mariamirabella2 Data 11 iunie 2020 19:32:48
Problema Multiplu Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <algorithm>
#include <queue>

using namespace std;

ifstream cin("multiplu.in");
ofstream cout("multiplu.out");

int a,b,m,t,viz[2000005],ans,pred[2000005],v[2000005],ultim[2000005];
queue <int> q;

int main()
{
    cin>>a>>b;
    m=a/__gcd(a,b)*b;
    if(m==0){
        cout<<0;
        return 0;
    }
    if(m==1){
        cout<<1;
        return 0;
    }
    else{
        viz[1%m]=1;
    }
    q.push(1);
    pred[1%m]=-1;
    while(!q.empty()){
        t=q.front();
        q.pop();
        if(viz[(t*10)%m]==0){
            viz[(t*10)%m]=1;
            pred[t*10%m]=t;
            ultim[t*10%m]=0;
            if((t*10)%m==0){
                ans=t*10%m;
                break;

            }
            else{
                q.push((t*10)%m);
            }
        }
        if(viz[(t*10+1)%m]==0){
            viz[(t*10+1)%m]=1;
            pred[(t*10+1)%m]=t;
            ultim[(t*10+1)%m]=1;
            if((t*10+1)%m==0){
                ans=(t*10+1)%m;
                break;
            }
            else{
                q.push((t*10+1)%m);
            }
        }
    }
    int k=0;
    while(pred[ans]!=-1){
        v[++k]=ultim[ans];
        ans=pred[ans];
    }
    cout<<1;
    for(int i=k;i>0;i--){
        cout<<v[i];
    }
    return 0;
}