Cod sursa(job #997568)

Utilizator andreiiiiPopa Andrei andreiiii Data 14 septembrie 2013 15:42:29
Problema Multiplu Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <cstring>
#include <queue>
#define N 2000001
using namespace std;

int cif[N], nxt[N], sol[100];
queue <int> Q;

int cmmdc(int r, int t)
{
    int c;
    while (t) {
        c = r % t;
        r = t;
        t = c;
    }
    return r;
}

int main()
{
	freopen("multiplu.in", "r", stdin);
	freopen("multiplu.out", "w", stdout);
	int n, i, poz;
	long long x;
	scanf("%d %d ", &n, &i);
	n=n*i/cmmdc(n, i);
	Q.push(1);
	nxt[1]=-1;
	cif[1]=1;
	while(1)
	{
		x=Q.front();
		Q.pop();
		if(x*10%n==0)
		{
			poz=x;
			sol[++sol[0]]=0;
			break;
		}
		if((x*10+1)%n==0)
		{
			poz=x;
			sol[++sol[0]]=1;
			break;
		}
		if(!nxt[x*10%n])
		{
			Q.push(x*10%n);
			nxt[x*10%n]=x;
		}
		if(!nxt[(x*10+1)%n])
		{
			Q.push((x*10+1)%n);
			nxt[(x*10+1)%n]=x;
			cif[(x*10+1)%n]=1;
		}
	}
	for(i=poz;i!=-1;i=nxt[i])
	{
		//printf("%d", cif[i]);
		sol[++sol[0]]=cif[i];
	}
	for(i=sol[0];i;i--) printf("%d", sol[i]);
}