Cod sursa(job #2490743)

Utilizator SochuDarabaneanu Liviu Eugen Sochu Data 10 noiembrie 2019 20:17:49
Problema Multiplu Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("multiplu.in");
ofstream g ("multiplu.out");

int a , b;
bitset < 2000050 > mark;
queue < vector < short > > c;
vector < short > d;
map < vector < short > , int > rest;


int cmmdc(int a , int b)
{
    int r;

    while(b)
    {
        r = a % b;
        a = b;
        b = r;
    }

    return a;
}

void Print_Answer(vector < short > a)
{
    for(int i = 1 ; i <= a[0] ; i++)
        g << a[i];

    exit(0);
}

int main()
{
    f >> a >> b;

    int m = a * b / cmmdc(a , b) , r , crest;

    mark[1] = 1;

    d.push_back(1);
    d.push_back(1);

    c.push(d);
    rest[d] = 1;

    while(!c.empty())
    {
        d = c.front();
        c.pop();

        crest = rest[d];
        ++d[0];
        d.push_back(0);

        r = crest * 10 % m;
        rest[d] = r;

        if(r == 0)
            Print_Answer(d);

        if(!mark[r])
            c.push(d) , mark[r] = 1;

        d[d[0]] = 1;

        r = crest * 10 + 1;
        r %= m;
        rest[d] = r;

        if(r == 0)
            Print_Answer(d);

        if(!mark[r])
            c.push(d) , mark[r] = 1;
    }

    return 0;
}