Cod sursa(job #2147471)

Utilizator rares_ciocieaRares Andrei Ciociea rares_ciociea Data 28 februarie 2018 19:26:08
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("multiplu.in");
ofstream out("multiplu.out");//cuie=hollol
struct cuie
{
    int parent,rest,cifra;
};
vector <cuie> v;
bool nr[100001];
bool ap[2000001];
int cmmmc(int a,int b)
{
    int rest,ca=a,cb=b;
    while(b)
    {
        rest=a%b;
        a=b;
        b=rest;
    }
    return ca*cb/a;
}
int main()
{
    int n,i=1,a,b,poz=1,unde=1;
    in>>a>>b;
    cuie current,current0,current1;
    n=cmmmc(a,b);
    current.parent=1;
    current.rest=1%n;
    current.cifra=1;
     v.push_back(current);;
     v.push_back(current);;
    ap[v[1].rest]=1;
    while(v[poz].rest!=0)
    {
        current=v[poz];
        current0=current1=current;
        current0.rest*=10;
        current0.rest%=n;
        current0.parent=current1.parent=poz;
        current1.rest=(current1.rest*10+1)%n;
        current0.cifra=0;
        current1.cifra=1;
        if(ap[current0.rest]==0)
        {
            v.push_back(current0);
            ap[current0.rest]=1;
            unde++;
            if(current0.rest==0)
            {
                break;
            }
        }
        if(ap[current1.rest]==0)
        {
            v.push_back(current1);
            ap[current1.rest]=1;
            unde++;
            if(current1.rest==0)
            {
                    break;
            }
        }
        poz++;
    }
    int catecif=1;
    nr[0]=0;
    while(unde>=1)
    {
        nr[catecif]=v[unde].cifra;
        if(unde==1)
            break;
        catecif++;
        unde=v[unde].parent;
    }
    reverse(nr+1,nr+catecif+1);
    for(i=1;i<=catecif;i++)
        out<<nr[i];
    return 0;
}