Pagini recente » Cod sursa (job #2569654) | Cod sursa (job #1580108) | Cod sursa (job #2342074) | Cod sursa (job #2140365) | Cod sursa (job #1226809)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f ("multiplu.in");
ofstream g ("multiplu.out");
const int MMAX = 2000000;
int m, x;
//pair <int, int> rest[MMAX]; //first: cifra, second: rest anterior
int c[MMAX], prev[MMAX];
//queue < pair <int, int> > q;
pair <int, int> q[MMAX + 1];
inline int cmmdc(int a, int b) {
if (b == 0) return a;
return cmmdc(b, a % b);
}
inline void scrie(int k) {
if (k != x) scrie(prev[k]);
//cout << rest[x].second << ' ';
g << c[k];
}
void rezolva() {
bool done = false;
int r, r2, prim = 1, ultim = 1;
pair <int, int> p;
x = 1 % m;
//cout << x;
c[x] = 1;
prev[x] = 0;
q[ultim] = make_pair(c[x], prev[x]);
while (!done && prim <= ultim) {
p = q[prim];
r = (p.first + p.second * 10) % m;
//cout << r << ' ';
//q.pop();
prim++;
if (r == 0) done = true;
else {
r2 = r * 10 % m;
if (prev[r2] == 0 && r2 != x) {
c[r2] = 0;
prev[r2] = r;
//q.push(rest[r2]);
q[++ultim] = make_pair(c[r2], prev[r2]);
if (r2 == 0) done = true;
}
r2 = (r * 10 + 1) % m;
if (prev[r2] == 0 && r2 != x) {
c[r2] = 1;
prev[r2] = r;
q[++ultim] = make_pair(c[r2], prev[r2]);
if (r2 == 0) done = true;
}
}
}
}
int main () {
int a, b;
f >> a >> b;
m = a * b / cmmdc(a, b);
rezolva();
scrie(0);
return 0;
}