Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <iomanip>
- #include <vector>
- #include <array>
- #include <set>
- #include <map>
- using namespace std;
- #define int long long
- const long long INF = 1e18 + 7;
- const int MAXN = 1e1 + 100;
- const int N = 3e5 + 10;
- const int MOD = 1e9 + 7;
- int dp[1 << 18][105];
- signed main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int n, m;
- cin >> n >> m;
- vector<int> a;
- map<int, int> cnt;
- while (n) {
- a.emplace_back(n % 10);
- ++cnt[n % 10];
- n /= 10;
- }
- n = a.size();
- dp[0][0] = 1;
- for (int mask = 0; mask < (1 << n); ++mask) {
- for (int rem = 0; rem < m; ++rem) {
- for (int i = 0; i < n; ++i) {
- if (mask & (1 << i) || (mask == 0 && a[i] == 0)) continue;
- int new_rem = (rem * 10 + a[i]) % m;
- dp[mask | (1 << i)][new_rem] += dp[mask][rem];
- }
- }
- }
- int ans = dp[(1 << n) - 1][0];
- for (auto [x, y]: cnt) {
- for (int i = 2; i <= y; ++i) {
- ans /= i;
- }
- }
- cout << ans << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment