Cod sursa(job #195432)

Utilizator AndreyPAndrei Poenaru AndreyP Data 18 iunie 2008 16:11:11
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include<stdio.h>
int n,n1,d,k1,ka,k2,k3,k11,k22,k33,k,rezf;
int doi[]={2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608};
int trei[]={3,9,27,81,243,729,2187,6561,19683,59049,177147,531441,1594323,4782969,14348907};
int cinci[]={5,25,125,625,3125,15625,78125,390625,1953125,9765625};
int afla(int x,int *a)
{
	int i=0;
	long long rez=0;
	while(x>=a[i])
	{
		rez=rez+x/a[i];
		i++;
	}
	return rez;
}
void coord2()
{
	int i;
	for(i=1; i<n1; i++)
	{
		k2=afla(i,doi);
		k3=afla(n-i,doi);
		k=k1-k2-k3;
		if(k>0)
			rezf++;
	}
	rezf<<=1;
	if(!(n&1))
	{
		k2=afla(n1,doi);
		k3=k2;
		k=k1-k2-k3;
		if(k>0)
			rezf++;
	}
}
void coord3()
{
	int i;
	for(i=1; i<n1; i++)
	{
		k2=afla(i,trei);
		k3=afla(n-i,trei);
		k=k1-k2-k3;
		if(k>0)
			rezf++;
	}
	rezf<<=1;
	if(!(n&1))
	{
		k2=afla(n1,trei);
		k3=k2;
		k=k1-k2-k3;
		if(k>0)
			rezf++;
	}
}
void coord4()
{
	int i;
	for(i=1; i<n1; i++)
	{
		k2=afla(i,doi);
		k3=afla(n-i,doi);
		k=k1-k2-k3;
		k>>=1;
		if(k>0)
			rezf++;
	}
	rezf<<=1;
	if(!(n&1))
	{
		k2=afla(n1,doi);
		k3=k2;
		k=k1-k2-k3;
		k>>=1;
		if(k>0)
			rezf++;
	}
}
void coord5()
{
	int i;
	for(i=1; i<n1; i++)
	{
		k2=afla(i,cinci);
		k3=afla(n-i,cinci);
		k=k1-k2-k3;
		if(k>0)
			rezf++;
	}
	rezf<<=1;
	if(!(n&1))
	{
		k2=afla(n1,cinci);
		k3=k2;
		k=k1-k2-k3;
		if(k>0)
			rezf++;
	}
}
void coord6()
{
	int i;
	for(i=1; i<n1; i++)
	{
		k2=afla(i,doi);
		k3=afla(n-i,doi);
		k22=afla(i,trei);
		k33=afla(n-i,trei);
		k=k1-k2-k3;
		ka=k11-k22-k33;
		if((k>0)&&(ka>0))
			rezf++;
	}
	rezf<<=1;
	if(!(n&1))
	{
		k2=afla(n1,doi);
		k3=k2;
		k22=afla(n1,trei);
		k33=k22;
		k=k1-k2-k3;
		ka=k11-k22-k33;
		if((ka>0)&&(k>0))
			rezf++;
	}
}
int main()
{
	freopen("pascal.in","r",stdin);
	freopen("pascal.out","w",stdout);
	scanf("%d%d",&n,&d);
	n1=n>>1;
	if(n&1)
		n1++;
	if(d==2)
		k1=afla(n,doi);
	else
	if(d==3)
		k1=afla(n,trei);
	else
	if(d==4)
		k1=afla(n,doi);
	else
	if(d==5)
		k1=afla(n,cinci);
	else
	if(d==6)
	{
		k1=afla(n,doi);
		k11=afla(n,trei);
	}
	if(k1==0)
	{
		printf("0\n");
		return 0;
	}
	switch(d)
	{
		case 2: coord2(); break;
		case 3: coord3(); break;
		case 4: coord4(); break;
		case 5: coord5(); break;
		case 6: coord6(); break;
	}
	printf("%d\n",rezf);
	return 0;
}