Pagini recente » Borderou de evaluare (job #2009093) | Cod sursa (job #1306862) | Cod sursa (job #2626107) | Cod sursa (job #718212) | Cod sursa (job #2627242)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
const int DIM = (1 << 18);
const int P = 20;
long long dp[DIM][P];
int cif[P];
int rest[225];
int it;
main()
{
long long n;
int p;
fin >> n >> p;
while(n)
{
cif[++it] = n % 10;
n /= 10;
}
for(int i = 1; i <= 220; ++i)
rest[i] = i % p;
dp[0][0] = 1;
int mx = (1 << (it)) - 1;
for(int mask = 0; mask <= mx; ++mask)
for(int r = 0; r < p; ++r)
if(dp[mask][r] > 0)
for(int bit = 0; bit < it; ++bit)
if((mask & (1 << bit)) == 0)
dp[(mask ^ (1 << bit))][rest[r * 10 + cif[bit + 1]]] += dp[mask][r];
fout << dp[mx][0] << '\n';
}