Cod sursa(job #1758430)

Utilizator GinguIonutGinguIonut GinguIonut Data 17 septembrie 2016 11:31:49
Problema Ratphu Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>

#define nMax 19
#define pMax 21

using namespace std;

ifstream fin("ratphu.in");
ofstream fout("ratphu.out");

int nrDig, n, p;
int dig[nMax];
long long dp[1 << nMax][pMax];


int mod(int val)
{
    while(val>=p)
        val-=p;

    return val;
}

void read()
{
    fin>>n>>p;
    nrDig=-1;

    while(n)
    {
        dig[++nrDig]=n%10;
        n/=10;
    }
}

void solve()
{
    int lim=(1 << (nrDig+1))-1;
    dp[0][0]=1;

    for(int i=0; i<=lim; i++)
    {
        for(int j=0; j<p; j++)
        {
            for(int k=0; k<=nrDig; k++)
            {
                if(i & (1 << k))
                    continue;
                dp[i+(1 << k)][mod(j*10+dig[k])]+=dp[i][j];
            }
        }
    }

    fout<<dp[lim][0];
}
int main()
{
    read();
    solve();
}