Pagini recente » Cod sursa (job #1519041) | Cod sursa (job #2306733) | Cod sursa (job #2756264) | Cod sursa (job #191319) | Cod sursa (job #1264920)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
const int CONFMAX=262150;
const int PMAX=21;
int p,len,cif[PMAX],modulo[1000];
long long n,dp[CONFMAX][PMAX];
map<int,int>viz;
int main()
{
int i,conf,maxim,aux,auxx;
fin>>n>>p;
while (n)
{
cif[len]=n%10;
len++;
n/=10;
}
//preprocesare
for (i=0;i<1000;i++) modulo[i]=i%p;
for (i=0;i<len;i++) viz[1<<i]=i;
maxim=1<<len;
for (conf=1;conf<maxim;conf++)
if (viz.find(conf)!=viz.end())
{
aux=cif[viz[conf]];
dp[conf][aux%p]=1;
}
else
{
aux=conf;
while (aux)
{
auxx=aux^(aux&(aux-1));
aux-=auxx;
for (i=0;i<p;i++)
dp[conf][modulo[i*10+cif[viz[auxx]]]]+=dp[conf-auxx][i];
}
}
fout<<dp[maxim-1][0]<<"\n";
return 0;
}