Cod sursa(job #3163047)

Utilizator SSKMFSS KMF SSKMF Data 30 octombrie 2023 13:45:38
Problema Multiplu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
#include <queue>
using namespace std;

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

char numar[2000001];
int sursa[2000001];

int Cmmdc (const int valoare_1 , const int valoare_2)
{
    return valoare_2 ? Cmmdc(valoare_2 , valoare_1 % valoare_2) : valoare_1;
}

int main ()
{
    int valoare_1 , valoare_2;
    cin >> valoare_1 >> valoare_2;

    queue <int> optiuni; optiuni.push(1); sursa[1] = -1;
    int divizor = valoare_1 / Cmmdc(valoare_1 , valoare_2) * valoare_2;
    while (!sursa[0])
    {
        const int rest_actual = optiuni.front();
        for (int valoare = 0 ; valoare < 2 ; valoare++) {
            if (!sursa[(rest_actual * 10 + valoare) % divizor]) {
                sursa[(rest_actual * 10 + valoare) % divizor] = rest_actual;
                optiuni.push((rest_actual * 10 + valoare) % divizor);
            }
        }

        optiuni.pop();
    }

    int lungime = 0;
    for (int rest_actual = 0 ; rest_actual != -1 ; rest_actual = sursa[rest_actual])
        { numar[lungime++] = (sursa[rest_actual] * 10 % divizor == rest_actual ? '0' : '1'); }

    for (int stanga = 0 , dreapta = lungime - 1 ; stanga < dreapta ; stanga++ , dreapta--)
        { swap(numar[stanga] , numar[dreapta]); }
    
    cout.write(numar , lungime);
    cout.close(); cin.close();
    return 0;
}