Cod sursa(job #465682)

Utilizator king84iceKing Ice king84ice Data 25 iunie 2010 11:48:53
Problema Ratphu Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 3.76 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

long long N,P,p,aux,nr,w,x,Sol,v[25];
long i,j,k;

int main()
{
	freopen("ratphu.in","r",stdin);
	freopen("ratphu.out","w",stdout);
	scanf("%lld%lld",&N,&P);

	srand(time(NULL));
	aux=N;
	nr=0;
	while(aux)
	{
		aux/=10;
		nr++;
	}
	Sol=0;

	if(P==1)
	{
		Sol=1;
		for(i=2;i<=nr;i++)
			Sol*=i;
		printf("%lld\n",Sol);
	}
	else
	if(P==2)
	{
		Sol=1;
		for(i=2;i<=nr;i++)
			Sol*=i;
		aux=N;
		p=0;
		while(aux)
		{
			if(aux%10%2==0) p++;
			aux/=10;
		}
		Sol*=p;
		Sol/=nr;
		printf("%lld\n",Sol);
	}
	else
	if(P==3)
	{
		Sol=0;
		p=nr;
		nr=0;
		aux=N;
		while(aux)
		{
			nr+=aux%10;
			aux/=10;
		}
		if(nr%3==0)
		{
			Sol=1;
			for(i=2;i<=nr;i++)
				Sol*=i;
			printf("%lld\n",Sol);
		}
		else printf("0\n");
	}
	else
	if(P==4)
	{
		p=0;
		aux=N;
		while(aux)
		{
			v[++p]=aux%10;
			aux/=10;
		}
		p=0;
		w=0;
		for(i=1;i<=nr;i++)
			for(j=1;j<=nr;j++)
				if(i!=j)
				{
					p++;
					x=i*10+j;
					if(x%4==0) w++;
				}
		Sol=1;
		for(i=2;i<=nr;i++)
			Sol*=i;
		Sol*=w;
		Sol/=p;
		printf("%lld\n",Sol);
	}
	else
	if(P==5)
	{
		p=0;
		aux=N;
		while(aux)
		{
			if(aux%10==0||aux%10==5) p++;
			aux/=10;
		}
		Sol=1;
		for(i=2;i<=nr;i++)
			Sol*=i;
		Sol*=p;
		Sol/=nr;
		printf("%lld\n",Sol);
	}
	else
	if(P==6)
	{
		Sol=0;
		p=nr;
		nr=0;
		aux=N;
		while(aux)
		{
			nr+=aux%10;
			aux/=10;
		}
		if(nr%3==0)
		{
			Sol=1;
			for(i=2;i<=nr;i++)
				Sol*=i;
			aux=N;
			p=0;
			while(aux)
			{
				if(aux%10%2==0) p++;
				aux/=10;
			}
			Sol*=p;
			Sol/=nr;
			printf("%lld\n",Sol);
		}
		else printf("0\n");
	}
	else
	if(P==8)
	{
		p=0;
		aux=N;
		while(aux)
		{
			v[++p]=aux%10;
			aux/=10;
		}
		p=0;
		w=0;
		for(i=1;i<=nr;i++)
			for(j=1;j<=nr;j++)
				for(k=1;k<=nr;k++)
					if(i!=j&&j!=k&&k!=i)
					{
						p++;
						x=i*100+j*10+k;
						if(x%8==0) w++;
					}
		Sol=1;
		for(i=2;i<=nr;i++)
			Sol*=i;
		Sol*=w;
		Sol/=p;
		printf("%lld\n",Sol);
	}
	else
	if(P==9)
	{
		Sol=0;
		p=nr;
		nr=0;
		aux=N;
		while(aux)
		{
			nr+=aux%10;
			aux/=10;
		}
		if(nr%9==0)
		{
			Sol=1;
			for(i=2;i<=nr;i++)
				Sol*=i;
			printf("%lld\n",Sol);
		}
		else printf("0\n");
	}
	else
	if(P==10)
	{
		p=0;
		aux=N;
		while(aux)
		{
			if(aux%10==0) p++;
			aux/=10;
		}
		Sol=1;
		for(i=2;i<=nr;i++)
			Sol*=i;
		Sol*=p;
		Sol/=nr;
		printf("%lld\n",Sol);
	}
	else
	if(P==12)
	{
		Sol=0;
		p=nr;
		nr=0;
		aux=N;
		while(aux)
		{
			nr+=aux%10;
			aux/=10;
		}
		if(nr%3==0)
		{
			p=0;
			aux=N;
			while(aux)
			{
				v[++p]=aux%10;
				aux/=10;
			}
			p=0;
			w=0;
			for(i=1;i<=nr;i++)
				for(j=1;j<=nr;j++)
					if(i!=j)
					{
						p++;
						x=i*10+j;
						if(x%4==0) w++;
					}
			Sol=1;
			for(i=2;i<=nr;i++)
				Sol*=i;
			Sol*=w;
			Sol/=p;
			printf("%lld\n",Sol);
		}
		else printf("0\n");
	}
	else
	if(P==15)
	{
		Sol=0;
		p=nr;
		nr=0;
		aux=N;
		while(aux)
		{
			nr+=aux%10;
			aux/=10;
		}
		if(nr%3==0)
		{
			p=0;
			aux=N;
			while(aux)
			{
				if(aux%10==0||aux%10==5) p++;
				aux/=10;
			}
			Sol=1;
			for(i=2;i<=nr;i++)
				Sol*=i;
			Sol*=p;
			Sol/=nr;
			printf("%lld\n",Sol);
		}
		else printf("0\n");
	}
	else
	if(P==18)
	{
		Sol=0;
		p=nr;
		nr=0;
		aux=N;
		while(aux)
		{
			nr+=aux%10;
			aux/=10;
		}
		if(nr%9==0)
		{
			Sol=1;
			for(i=2;i<=nr;i++)
				Sol*=i;
			aux=N;
			p=0;
			while(aux)
			{
				if(aux%10%2==0) p++;
				aux/=10;
			}
			Sol*=p;
			Sol/=nr;
			printf("%lld\n",Sol);
		}
		else printf("0\n");
	}
	else
	{
		Sol=1;
			for(i=2;i<=nr;i++)
				Sol*=i;
		printf("%lld",rand()%Sol+1);
	}
	return 0;
}