Cod sursa(job #1554711)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 21 decembrie 2015 17:15:22
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <algorithm>
#include <iostream>
#include <fstream>
#include <bitset>
#include <vector>
#include <queue>
using namespace std;
ifstream in("multiplu.in");
ofstream out("multiplu.out");
const int maxp = 2000005;
vector <int> reconstituire;
bitset <maxp> marcat;
queue <int> q;
int father[maxp];
int digit[maxp];
int cmmdc(int a, int b)
{
    int r = a % b;
    while(r)
    {
        a = b;
        b = r;
        r = a%b;
    }
    return b;
}

int cmmmc(int a, int b)
{
    return a * b / cmmdc(a, b);
}
int main()
{
    int a, b;
    in >> a >> b;
    int mod = cmmmc(a, b);
    q.push(1);
    marcat[1] = 1;
    father[1] = 0;
    int k = 1;
    while(!q.empty() && !marcat[0] && k < 20)
    {
        int p = q.front();
        q.pop();
        int nr_format = (10LL * p) % mod;
        if(!marcat[nr_format])
        {
            q.push(nr_format);
            marcat[nr_format] = 1;
            father[nr_format] = p;
            digit[nr_format] = 0;
        }
        nr_format = (10LL * p + 1) % mod;
        if(!marcat[nr_format])
        {
            q.push(nr_format);
            marcat[nr_format] = 1;
            father[nr_format] = p;
            digit[nr_format] = 1;
        }
    }
    int nr = 0;
    while(father[nr] != 0)
    {
        reconstituire.push_back(digit[nr]);
        nr = father[nr];
    }
    out << 1;
    reverse(reconstituire.begin(), reconstituire.end());
    for(auto it : reconstituire)
        out << it;
    out << "\n";
    return 0;
}