Cod sursa(job #465845)

Utilizator indestructiblecont de teste indestructible Data 25 iunie 2010 13:33:02
Problema Ratphu Scor 40
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 0.96 kb
#include <stdio.h>
#define LMAX 35
#define ll long long
int b,cif[LMAX],r,s,ap[LMAX];
ll a,sol,act,fact[LMAX];
char viz[LMAX];
void back(int k)
{
	if (k==r+1)
	{
		if (act % b==0)
			sol++;
		return ;
	}
	int i;
	for (i=1; i<=r; i++)
		if (!viz[i])
		{
			act=act*10+cif[i];
			viz[i]=1;
			back(k+1);
			viz[i]=0;
			act/=10;
		}
}
int main()
{
	freopen("ratphu.in","r",stdin);
	freopen("ratphu.out","w",stdout);
	scanf("%lld%d",&a,&b);
	while (a)
	{
		s+=a%10;
		cif[++r]=a%10;
		ap[a%10]++;
		a/=10;
	}
	fact[0]=1;
	int i;
	for (i=1; i<=r; i++)
		fact[i]=fact[i-1]*i;
	if (b==3 && s%3==0)
	{
		printf("%lld\n",fact[r]);
		return 0;
	}
	if (b==9 && s%9==0)
	{
		printf("%lld\n",fact[r]);
		return 0;
	}
	if (b==10 && ap[0])
	{
		printf("%lld\n",fact[r-1]*ap[0]);
		return 0;
	}
	if (b==5 && ap[0]+ap[5]>0)
	{
		printf("%lld\n",fact[r-1]*(ap[0]+ap[5]));
		return 0;
	}
	back(1);
	printf("%lld\n",sol);
	return 0;
}