Cod sursa(job #465875)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 25 iunie 2010 13:43:42
Problema Ratphu Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 2.14 kb
#include <fstream>

using namespace std;
unsigned long long x;
int n,a[20],p,k,k2,comb0;
unsigned long long factorial(int x)
{
    int i;
    unsigned long long sol=1;
    for(i=1;i<=x;i++)
    sol*=i;
    return sol;
}
int main()
{
    int i;
    ifstream fi("ratphu.in");
    ofstream fo("ratphu.out");
    fi>>x;
    n=0;
    while(x!=0)
    {
        a[++n]=x%10;
        x/=10;
    }

    fi>>p;
    if(p==1) {fo<<factorial(n)<<"\n"; }
    if(p==2)
    {
        k=0;
        for(i=1;i<=n;i++)
            if(a[i]%2==0) k++;
        fo<<k*factorial(n-1)<<"\n";
    }
    if(p==3)
    {
        k=0;
        for(i=1;i<=n;i++) k+=a[i];
        if(k%3==0) fo<<factorial(n)<<"\n";
        else fo<<0<<"\n";
    }
    if(p==5)
    {
       k=0;
       for(i=1;i<=n;i++) if((a[i]==0)||(a[i]==5)) k++;
       fo<<k*factorial(n-1)<<"\n";
    }
    if(p==6)
    {
        k=0;
        for(i=1;i<=n;i++) k+=a[i];
        if(k%3==0)
        {
        k=0;
        for(i=1;i<=n;i++)
            if(a[i]%2==0) k++;
        fo<<k*factorial(n-1)<<"\n";
        } else fo<<0<<"\n";
    }
    if(p==9)
    {
        k=0;
        for(i=1;i<=n;i++) k+=a[i];
        if(k%9==0) fo<<factorial(n)<<"\n";
        else fo<<0<<"\n";
    }
    if(p==18)
    {
        k=0;
        for(i=1;i<=n;i++) k+=a[i];
        if(k%9==0)
        {
        k=0;
        for(i=1;i<=n;i++)
            if(a[i]%2==0) k++;
        fo<<k*factorial(n-1)<<"\n";
        }
        else fo<<0<<"\n";

    }
    if(p==10)
    {
        k=0;
        for(i=1;i<=n;i++)
            if(a[i]==0) k++;
        fo<<k*factorial(n-1)<<"\n";
    }
    if(p==20)
    {
        k=0; k2=0;
        for(i=1;i<=n;i++)
            if(a[i]==0) k++;
        if(k==1) comb0=0; else {

        comb0=factorial(k)/factorial(k-2);
        comb0/=2; }
        for(i=1;i<=n;i++)
            if((a[i]%2==0)&&(a[i]!=0)) k2+=k;
        k2+=comb0;
        fo<<k2*factorial(n-2)<<"\n";
    }
    if(p==15)
    {
        k=0;
        for(i=1;i<=n;i++) k+=a[i];
        if(k%3==0)
        {
         k=0;
         for(i=1;i<=n;i++) if((a[i]==0)||(a[i]==5)) k++;
         fo<<k*factorial(n-1)<<"\n";
        } else fo<<0<<"\n";
    }




    return 0;
}