Pagini recente » Cod sursa (job #2219442) | Cod sursa (job #1491218) | Cod sursa (job #1246991) | Cod sursa (job #1800699) | Cod sursa (job #2054275)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define mp make_pair
#define CHECK(x) if(!(x)) return false;
#ifdef INFOARENA
#define ProblemName "ratphu"
#endif
#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif
const int MAXN = 20;
const int MAXP = 25;
LL dp[1 << MAXN][MAXP];
int pw[MAXN];
char buf[MAXN];
int main() {
assert(freopen(InFile, "r", stdin));
assert(freopen(OuFile, "w", stdout));
int N, P;
scanf("%s%d", buf, &P);
N = strlen(buf);
pw[0] = 1 % P;
for (int i = 1; i <= N; ++i)
pw[i] = (pw[i - 1] * 10) % P;
for (int i = 0; i < N; ++i)
buf[i] -= '0';
memset(dp, 0, sizeof dp);
dp[0][0] = 1;
int lim = (1 << N);
for (int msk = 0; msk < lim; ++msk)
for (int i = 0; i < N; ++i) {
int bit = (1 << i);
if (msk & bit)
continue;
int nmsk = msk | bit;
for (int r = 0; r < P; ++r)
dp[nmsk][((r * 10) + buf[i]) % P] += dp[msk][r];
}
printf("%lld\n", dp[lim - 1][0]);
return 0;
}