Cod sursa(job #465703)

Utilizator ursu-valiJerdea Florin ursu-vali Data 25 iunie 2010 12:18:20
Problema Ratphu Scor 40
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 1.91 kb
#include<stdio.h>
#define infile "ratphu.in"
#define outfile "ratphu.out"

long a[25],p,vid[25];
unsigned long long s,q,n,nr;

long long factorial(long n)
{
	long i,q=1;
	for(i=1;i<=n;i++)
		q*=i;
	return q;
}
void read()
{
	long i=0;
	scanf("%llu",&n);
	while(n!=0)
	{
		i++;
		a[i]=n%10;
		n=n/10;
	}
	a[0]=i;
	scanf("%ld",&p);
}
void bk(long w)
{
	long i;
	if((w==a[0]+1)&&(nr%p==0))
		s++;
	else
	{
		for(i=1;i<=a[0];i++)
			if(vid[i]==0)
			{
				nr=nr*10+a[i];
				vid[i]=1;
				bk(w+1);
				nr=nr/10;
				vid[i]=0;
			}
	}
}
void solve()
{
	long ok,i,j;
	//long long s,q;
	long c[25];
	
	ok=1;
	if(p==1)
	{
		q=factorial(a[0]);
		printf("%llu\n",q);
		ok=0;
	}
	if(p==2)
	{
		s=0;
		ok=0;
		q=factorial(a[0]-1);
		for(i=1;i<=a[0];i++)
			if(a[i]%2==0)
				s+=q;
		printf("%llu\n",s);	
	}
	if((p==3)||(p==9))
	{
		s=0;q=1;
		ok=0;
		for(i=1;i<=a[0];i++)
		{
			s+=a[i];
			q*=i;
		}
		if(s%p==0)
			printf("%llu\n",q);
	}
	if(p==4)
	{
		q=factorial(a[0]-2);		
		j=0;
		ok=0;
		for(i=1;i<=a[0];i++)
			if(a[i]%2==0)
			{
				j++;
				c[j]=a[i];
			}
		c[0]=j;	
		for(i=1;i<c[0];i++)
			for(j=i+1;j<=c[0];j++)
			{
				if((c[i]*10+c[j])%4==0)
					s+=q;
			}
		printf("%llu",q);
	}
	if(p==5)
	{
		//s=0;
		ok=0;
		q=factorial(a[0]-1);
		for(i=1;i<=a[0];i++)
			if(a[i]==5)
				s+=q;
		printf("%llu\n",s);	
	}
	if(p==6)
	{
		//s=0;
		nr=0;
		ok=0;
		q=factorial(a[0]-1);
		for(i=1;i<=a[0];i++)
		{
			if(a[i]%2==0)
				nr++;
			s+=a[i];
		}
		if(s%3==0)
			s=nr*q;
		printf("%llu\n",s);
	}
	if(p==10)
	{
		//s=0;
		ok=0;
		q=factorial(a[0]-1);
		for(i=1;i<=a[0];i++)
			if(a[i]==0)
				s+=q;
		printf("%llu\n",s);
	}
	if(ok==1)
	{
		bk(1);
		printf("%llu\n",s);
	}
}

int main()
{
	freopen(infile,"r",stdin);
	freopen(outfile,"w",stdout);
	read();
	solve();
	fclose(stdin);
	fclose(stdout);
	return 0;
}