Cod sursa(job #541581)

Utilizator DeadEyeNaiba Mihai Lucian DeadEye Data 25 februarie 2011 12:20:21
Problema Light2 Scor 0
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 1 Marime 0.94 kb
#include<cstdio>
int cx,n,k,x,n1,n2,nr,da,nda,nx[23][2],a[1000001];
int cmmdc(int x, int y)
{
	if(y==0)
		return x;
	else return cmmdc(y,x%y);
}
int main()
{
	freopen("light2.in","r",stdin);
	freopen("light2.out","w",stdout);
	scanf("%d",&n);
	scanf("%d",&k);
	int i; int j; nr=0;
	for(i=1;i<=k;i++)
	{
		scanf("%d",&x);
		da=1; nda=0;
		for(j=1;j<=nr;j++)
			if(x==nx[j][0])
			{
				da=0;
				nx[j][1]=(nx[j][1]+1)/2;
				break;
			}
		if(da)
		{
			nr++;
			nx[nr][0]=x;
			nx[nr][1]=1;
		}
	}
	for(i=1;i<=nr;i++)
		if(nx[i][1]==1)
		{
			//for(j=nx[i][0];j<=n;j+=nx[i][0])
				a[j]=(a[j]+1)%2;
		}
	for(i=1;i<=nr;i++)
		if(nx[i][1]==1)
			break;
	cx=nx[i][0];
	if(i<=nr)
		for(j=i+1;j<=nr;j++)
			if(nx[j][1]==1)
			{
				cx=(cx/cmmdc(cx,nx[j][0]))*nx[j][0];
			}
	n1=0; n2=0;
	for(i=1;i<=cx;i++)
	{
		if(a[i]==1)
			n1++;
		if(a[i]==1 && i<=n%cx)
			n2++;
	}
	printf("%d\n",n1*(n/cx)+n2);
	return 0;
}