Cod sursa(job #2311668)

Utilizator GoogalAbabei Daniel Googal Data 3 ianuarie 2019 16:12:51
Problema Multiplu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 1 << 22;

int a, b;
int m;

int ant[1 + NMAX];
int st[1 + NMAX];
int lst[1 + NMAX];

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

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

  return a;
}

void solve() {
  int le = 1;
  int ri = 1;

  ant[1] = 1;
  lst[1] = 1;
  st[ri] = 1;

  while(le <= ri) {
    int x = st[le];
    le++;

    for(int i = 0; i < 2; i++) {
      int y = (x * 10 + i) % m;

      if(ant[y] == 0) {
        ant[y] = x;
        lst[y] = i;

        st[++ri] = y;
      }

      if(y == 0)
        return;
    }
  }
}

void write(int pos) {
  if(pos != 1)
    write(ant[pos]);

  out << lst[pos];
}

int main()
{
  in >> a >> b;
  m = (a * b) / cmmdc(a, b);
  //cout << m << '\n';

  solve();

  write(0);
  out << '\n';

  in.close();
  out.close();

  return 0;
}