Pagini recente » Cod sursa (job #125905) | Cod sursa (job #3259105) | Cod sursa (job #2139777) | Cod sursa (job #3157713) | Cod sursa (job #465303)
Cod sursa(job #465303)
#include <cstdio>
#include <set>
using namespace std;
#define LL long long
LL N; int P;
LL NR;
int cnt[10];
set<int> left;
inline void back(int k, LL cur = 0, LL curCnt = 1) {
if (left.empty()) {
if (cur % P == 0) {
NR += curCnt;
}
return;
}
set<int> :: iterator it;
for (it = left.begin(); it != left.end(); it++) {
int i = *it;
cnt[i] -= 1;
if (cnt[i] == 0) {
left.erase(it);
}
back(k + 1, cur * 10 + i, curCnt * (cnt[i] + 1));
if (cnt[i] == 0) {
it = left.insert(i).first;
}
cnt[i] += 1;
}
}
int main() {
freopen("ratphu.in", "rt", stdin);
#ifndef DEBUG
freopen("ratphu.out", "wt", stdout);
#endif
scanf("%lld %d", &N, &P);
for (; N; N /= 10) {
left.insert(N % 10);
cnt[N % 10] += 1;
}
NR = 0;
back(0);
printf("%lld\n", NR);
return 0;
}