Cod sursa(job #465844)

Utilizator cahemanCasian Patrascanu caheman Data 25 iunie 2010 13:32:41
Problema Ratphu Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 1.1 kb
#include<stdio.h>
int c[20];
long fact(int a)
{
long s=1,i;
for(i=2;i<=a;i++)
 s=s*i;
return s;
}
long permut(int p)
{
int i,s=0;
if(p==3)
 {
 for(i=1;i<=c[0];i++)
  s=s+c[i];
 if(s%3==0)
  return fact(c[0]);
 else
  return 0;
 }
if(p==2)
 {
 for(i=1;i<=c[0];i++)
  if(c[i]%2==0)
   s++;
 return fact(c[0]-1)*s;
 }
if(p==5)
 {
 for(i=1;i<=c[0];i++)
  if(c[i]%5==0)
   s++;
 return s*fact(c[0]-1);
 }
if(p%3==0)
 {
 for(i=1;i<=c[0];i++)
  s=s+c[i];
 if(s%3==0)
  return permut(p/3);
 else
  return 0;
 }
if(p%2==0)
 return 3*permut(p/2);
return 0;
}
int main()
{
freopen("ratphu.in","r",stdin);
freopen("ratphu.out","w",stdout);
long long n,cn;
int p,i;
long r,s;
scanf("%lld%d",&n,&p);
cn=n;
do
{
c[++c[0]]=n%10;
n=n/10;
}while(n!=0);
if(p==11)
 {
 s=0;
 for(i=1;i<=c[0];i++)
  s=s+c[i];
 if(s%11==0)
  printf("%ld\n",fact(c[0]));
 else
  printf("0\n");
 return 0;
 }
if(p==1)
 {
 printf("%ld\n",fact(c[0]));
 return 0;
 }
if(p==17)
 {
 if(cn%17==0)
  printf("48\n");
 else
  printf("1\n");
 }
r=permut(p);
printf("%ld",r);
return 0;
}