Cod sursa(job #488138)

Utilizator ChallengeMurtaza Alexandru Challenge Data 27 septembrie 2010 19:15:08
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <vector>

using namespace std;

const char InFile[]="multiplu.in";
const char OutFile[]="multiplu.out";
const int MaxAB=2000010;

ifstream fin(InFile);
ofstream fout(OutFile);

int A,B,rest[MaxAB],sol,back[MaxAB],ucif[MaxAB],sf;
char ris[MaxAB];
vector<int> v;

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

int cmmmc(int A, int B)
{
	return A*B/cmmdc(A,B);
}

int main()
{
	fin>>A>>B;
	fin.close();

	A=cmmmc(A,B);
	if(1%A==0)
	{
		fout<<"1";
		fout.close();
		return 0;
	}
	else
	{
		rest[1]=1;
		back[1]=0;
		ucif[1]=1;
		int i=1,r;
		sf=1;
		while(true)
		{
			r=(rest[i]*10)%A;
			if(ris[r]==0)
			{
				ris[r]=1;
				rest[++sf]=r;
				back[sf]=i;
				ucif[sf]=0;
				if(rest[sf]==0)
				{
					sol=sf;
					break;
				}
			}

			r=(rest[i]*10+1)%A;
			if(ris[r]==0)
			{
				ris[r]=1;
				rest[++sf]=r;
				back[sf]=i;
				ucif[sf]=1;
				if(rest[sf]==0)
				{
					sol=sf;
					break;
				}
			}
			++i;
		}
	}

	while(sol)
	{
		v.push_back(ucif[sol]);
		sol=back[sol];
	}

	for(register int i=(int)v.size()-1;i>=0;--i)
	{
		fout<<v[i];
	}
	fout.close();
	return 0;
}