Cod sursa(job #2081952)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 5 decembrie 2017 15:55:23
Problema Ratphu Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
/// OrangeWarrior #1
#include<bits/stdc++.h>
using namespace std;
ifstream f("ratphu.in");
ofstream g("ratphu.out");
long long fr[12],sc,nrd,nc,n,sol,nr,nr2,v[19];
bool use[19];
long long fact(int i)
{
    if(i<=1)
        return 1;
    long long sol=1;
    for(int j=2;j<=i;++j)
        sol*=j;
    return sol;
}
void bt(int k)
{
    if(k==nc+1){
        if(nr%nrd==0)
            sol++;
    }
    else
        for(int i=1;i<=nc;++i)
            if(!use[i])
            {
                nr=nr*10+v[i];
                use[i]=1;
                bt(k+1);
                use[i]=0;
                nr/=10;
            }
}
int main()
{
    f>>n>>nrd;
    while(n)
    {
        fr[n%10]++;
        sc=0;
        ++nc;
        v[nc]=n%10;
        n/=10;
    }
    if(nrd==1)
        sol=fact(nc);
    if(nrd==2)
        sol=(fr[0]+fr[2]+fr[4]+fr[6]+fr[8])*fact(nc-1);
    if(nrd==3)
        if(sc%3==0)
            sol=fact(nc);
    if(nrd==4)
        for(int i=4;i<=100;i++)
            sol+=(fr[i/10]+fr[i%10])*fact(nc-2);
    if(nrd==5)
        sol=(fr[0]+fr[5])*fact(nc-1);
    if(nrd==6)
        if(sc%3==0)
            sol=(fr[0]+fr[2]+fr[4]+fr[6]+fr[8])*fact(nc-1);
    if(nrd==7 || nrd==8)
        bt(1);
    if(nrd==9)
        if(sc%9==0)
            sol=fact(nc);
    if(nrd==10)
        sol=fr[0]*fact(nc-1);
    if(nrd==11)
        bt(1);
    if(nrd==12)
        if(sc%3==0)
            for(int i=4;i<=100;i++)
                sol+=(fr[i/10]+fr[i%10])*fact(nc-2);
    if(nrd==14 || nrd==13)
        bt(1);
    if(nrd==15)
        if(sc%3==0)
            sol=(fr[0]+fr[5])*fact(nc-1);
    if(nrd==16 || nrd==17)
        bt(1);
    if(nrd==18)
        if(sc%9==0)
            sol=(fr[0]+fr[2]+fr[4]+fr[6]+fr[8])*fact(nc-1);
    if(nrd==19)
        bt(1);
    if(nrd==20)
        sol=fr[0]*(fr[0]+fr[2]+fr[4]+fr[6]+fr[8]-1)*fact(nc-2);
    g<<sol<<'\n';
    return 0;
}