Cod sursa(job #2265675)

Utilizator vladcoroian2001Vlad Coroian vladcoroian2001 Data 21 octombrie 2018 15:46:11
Problema Multiplu Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream fi("multiplu.in");
ofstream fo("multiplu.out");
const int MAX=2e6+5;
int a,b,lcm,viz[MAX],pre[MAX],cif[MAX];
queue <int> Q;
vector <int> sol;
int gcd(int a,int b)
{
    int r;
    while(b)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}
void afis()
{
    int rest=0;
    while(rest!=-1)
    {
        sol.push_back(cif[rest]);
        rest=pre[rest];
    }
    for(int i=sol.size()-1;i>=0;i--)
        fo<<sol[i];
}
int main()
{
    fi>>a>>b;
    lcm=a*b/gcd(a,b);
    Q.push(1);
    viz[1]=1;
    pre[1]=-1;
    cif[1]=1;
    while(!viz[0])
    {
        int rest=Q.front();
        Q.pop();
        if(!viz[(rest*10)%lcm])
        {
            Q.push((rest*10)%lcm);
            viz[(rest*10)%lcm]=1;
            pre[(rest*10)%lcm]=rest;
            cif[(rest*10)%lcm]=0;
        }
        if(!viz[(rest*10+1)%lcm])
        {
            Q.push((rest*10+1)%lcm);
            viz[(rest*10+1)%lcm]=1;
            pre[(rest*10+1)%lcm]=rest;
            cif[(rest*10+1)%lcm]=1;
        }
    }
    afis();
    fi.close();
    fo.close();
    return 0;
}