Cod sursa(job #3204018)

Utilizator alexandraiacobelAlexandra Iacob alexandraiacobel Data 15 februarie 2024 14:00:21
Problema Multiplu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("multiplu.in");
ofstream fout("multiplu.out");
int a,b,d,viz[1001],rez[10001],ind,prv[10001],ant;
queue<int> q;


void reconstr()
{
    int i=0;
    while(prv[i])
    {
      if((prv[i] * 10)%d == i)
      {
            rez[++ind]=0;
      }
      else
        {
            rez[++ind]=1;
      }
      i= prv[i];
    }

}
void bfs()
{
    while(!q.empty())
    {

        int nod=q.front();
        q.pop();
        if(nod == 0) {reconstr(); break;}

        else
        {
            if(!viz[nod*10%d])
               {
                  prv[(nod*10)%d]=nod;
                  q.push(nod*10%d);
                  viz[nod*10%d]=1;
               }

            if(!viz[(nod*10+1)%d])
                {
                  prv[(nod*10+1)%d]=nod;
                  q.push((nod*10+1)%d);
                  viz[(nod*10+1)%d]=1;
                }

        }

    }
}

int cmmdc(int a, int b)
{
    int r;
    while(b)
    {
        r=a%b; a=b, b=r;
    }
    return a;
}

int main()
{
    fin>>a>>b;

    d=a*b/cmmdc(a,b); //CMMMC
    q.push(1);
    bfs();
    //Trb sa scriu invers numerele
    fout<<1;
    for(int i=ind;i>=1;i--)
        fout<<rez[i];
    return 0;
}