Cod sursa(job #72915)

Utilizator ProtomanAndrei Purice Protoman Data 15 iulie 2007 20:40:29
Problema Pascal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
FILE *f1,*f2;
long p,s,s1,s2,x,d,r,i,h,c,v[50000001],z[50000001];

void putere(long x)
{
	p=1;
	s=0;
	while  (p*d<=x)
	{
		p=p*d;
		s=s+x/p;
	}
}

int main()
{
	f1=fopen("pascal.in","r");
	f2=fopen("pascal.out","w");
	fscanf(f1,"%ld%ld",&r,&d);
	c=d;
	if (d==4) d=2;
	if (c!=6) putere(r);
	if (c==6)
	{
		d=2;
		putere(r);
		s1=s;
		d=3;
		putere(r);
		s2=s;
	}
	r++;
	d=c;
	s2=s;
	if (c!=6)
		for (i=1;i<=r;i++)
		{
			if (c==4) d=2;
			putere(i-1);
			v[i]=s;
		}
	if (c==6) 
		for (i=1;i<=r;i++)
		{
			d=3;
			putere(i-1);
			v[i]=s;
			d=2;
			putere(i-1);
			z[i]=s;
		}
	if (c!=6)
	{
		for (i=1;i<=r/2;i++)
		{
			if (c==4) 
				if (s2>v[i]+v[r+1-i]+1) h++;
			if (c!=4)
				if (s2>v[i]+v[r+1-i]) h++;
		}
		h=h*2;
		if (r%2==1)
		{
			i=r/2+1;
			if (c==4) 
				if (s2>v[i]+v[r+1-i]+1) h++;
			if (c!=4 )
				if (s2>v[i]+v[r+1-i]) h++;
		}
	}
	if (c==6)
	{
		for (i=1;i<=r/2;i++)
			if (s2>v[i]+v[r+1-i] && s1>z[i]+z[r+1-i]) h++;
		h=h*2;
		if (r%2==1)
		{
			i=r/2+1;
			if (s2>v[i]+v[r+1-i] && s1>z[i]+z[r+1-i]) h++;
		}
	}
	fprintf(f2,"%ld",h);
	fclose(f1);
	fclose(f2);
	return(0);
}