Cod sursa(job #1740986)

Utilizator ade_tomiEnache Adelina ade_tomi Data 12 august 2016 18:13:30
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 2000003
using namespace std;
int a, b, m, q[NMAX], viz[NMAX], cif[NMAX], poz[NMAX], sf, in, i, nr;
vector <int> sol;
int cmmdc (int a, int b)
{
    int c = a % b;
    while (c)
    {
        a = b;
        b = c;
        c = a % b;
    }
    return b;
}
int main()
{
    ifstream cin ("multiplu.in");
    ofstream cout ("multiplu.out");
    cin >> a >> b;
    m = a * b / cmmdc (a, b);
    in = 1;
    sf = 1;
    cif[1] = 1;
    q[1] = 1;
    poz[1] = -1;
    viz[1] =1 ;
    int debug = 0;
    if (debug)
        cout << m;
//    else 
    while (1)
    {
        //debug++;
       // nr = q[1];
        nr = (q[in] * 10) % m;
        if (viz[nr] == 0)
        {
            viz[nr] = 1;
            sf++;
            q[sf] = nr;
            cif[sf] = 0;
            poz[sf] = in;

        }
        //break;
        if (q[sf] == 0)
            break;
        nr = (q[in] * 10 + 1) % m;
        if (viz[nr] == 0)
        {
            viz[nr] = 1;
            sf++;
            q[sf] = nr;
            cif[sf] = 1;
            poz[sf] = in;
        }
        in++;
        if (q[sf] == 0)
            break;
       // if (debug == 1000){
        //    cout<<"PLM";
          //  return 0;            
      // i}
  
    }
   
  //  if( debug == 0)
    int p = sf;
    while (p != 1)
    {
        sol.push_back(cif[p]);
        p = poz[p];
    }
    sol.push_back(1);
    for (i = sol.size() - 1; i >= 0; i--)
        cout << sol[i];
    
    return 0;
}