Cod sursa(job #396456)
#include<fstream>
using namespace std;
ifstream in("multiplu.in");
ofstream out("multiplu.out");
const int MAX_N=2000002;
int pre[MAX_N], Q[MAX_N],P,U;
char u[MAX_N], viz[MAX_N];
int A, B, M;
inline void print(int p)
{
if(pre[p]) print(pre[p]);
out<<u[p];
}
int main()
{
in>>A>>B;
int rest, nrest, i, ok = 0;
P = 1, U = 0;
Q[++U] = 1; viz[1] = 1; u[1] = '1';
rest = A%B;
M = A * B;
while(rest) { A = B; B = rest; rest = A%B; }
M = M / B;
while( !ok )
{
rest = Q[P];
for(i = 0; i < 2; ++i) // trist, dar doar doua valori vreau.
{
nrest = ( rest * 10 + i) % M;
if( viz[nrest] != 1 && !ok )
{
Q[++U] = nrest; u[U] = i + '0';
pre[U] = P;
viz[nrest] = 1;
if(nrest == 0) ok = 1;
}
}
++P;
}
print(U);
return 0;
}