Pagini recente » Cod sursa (job #1377791) | Rezultatele filtrării | Solutii preONI 2007, Runda 3 | Rezultatele filtrării | Cod sursa (job #1554711)
#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;
}