Pagini recente » Arhiva de probleme | Cod sursa (job #415460) | Cod sursa (job #1477129) | Cod sursa (job #1823396) | Cod sursa (job #2256192)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream in("ratphu.in");
ofstream out("ratphu.out");
const int NMAX = 18;
const int PMAX = 20;
ll dp[1 << NMAX][PMAX];
int mod[201];
string s;
int main() {
int p;
in >> s >> p;
for(int i = 0; i <= 200; i ++)
mod[i] = i % p;
int n = s.size();
dp[0][0] = 1;
for(int mask = 0; mask < (1 << n); mask ++) {
for(int r = 0; r < p; r ++) {
if(dp[mask][r] == 0)
continue;
for(int i = 0; i < n; i ++) {
if((mask & (1 << i)) == 0) {
int newmask = mask ^ (1 << i);
dp[newmask][mod[r * 10 + (s[i] - '0')]] += dp[mask][r];
}
}
}
}
out << dp[(1 << n) - 1][0];
return 0;
}