Rating changes for last rounds are temporarily rolled back. They will be returned soon. ×

 
 
 
 
General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
42364256 Practice:
bjn
401D - 20 C++14 (GCC 6-32) Accepted 2417 ms 430932 KB 2018-09-02 16:39:38 2018-09-02 16:39:38
→ Source
#include <bits/stdc++.h>

using namespace std;

const int MASK = (1 << 19), M = 105;
long long dp[MASK][M], n, m, num, cnt[10];
vector <int> digits;

void Save() {
	long long tmp = n;
	while (tmp) {
		digits.push_back(tmp % 10);
		cnt[tmp % 10]++;
		tmp /= 10;
	}
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> n >> m;
	num = int(log10(n)) + 1;
	Save();
	dp[0][0] = 1;
	for (int mask = 0; mask < (1 << num) - 1; ++mask) {
		for (int rem = 0; rem < m; ++rem) {
			if (__builtin_popcount(mask) == 1 && digits[__builtin_ctz(mask)] == 0) break;
			for (int i = 1; i <= num; ++i) {
				if ((mask & (1 << (i - 1))) != 0) {
					continue;
				}
				dp[mask | (1 << (i - 1))][(rem * 10 + digits[i - 1]) % m] += dp[mask][rem]; 
			}
		}
	}
	long long res = dp[(1 << num) - 1][0];
	for (int i = 0; i <= 9; ++i) 
		for (int j = 2; j <= cnt[i]; ++j) 
			res /= j;
	cout << res << endl;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details