Pagini recente » Borderou de evaluare (job #2637701) | Cod sursa (job #2697086) | Cod sursa (job #707704) | Cod sursa (job #167608) | Cod sursa (job #2649801)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ratphu.in");
ofstream out("ratphu.out");
long long dp[(1<<19)][21];
int cifre[21];
int rest[301];
int k=0;
int main()
{
long long n;
int p;
in>>n>>p;
dp[0][0]=1;
while(n)
{
cifre[++k]=n%10;
n/=10;
}
for(int i=1;i<=300;i++)
rest[i]=i%p;
for(int masca=0;masca<=(1<<k)-1;masca++)
{
for(int restt=0;restt<p;restt++)
{
if(dp[masca][restt]>0)
{
for(int bit=0;bit<k;bit++)
{
if((masca & (1<<bit)) ==0)
dp[(masca^(1<<bit))][rest[restt*10+cifre[bit+1]]]+=dp[masca][restt];
}
}
}
}
out<<dp[(1<<k)-1][0]<<"\n";
return 0;
}