Cod sursa(job #3292264)

Utilizator tryharderulbrebenel mihnea stefan tryharderul Data 7 aprilie 2025 19:02:52
Problema Ratphu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

int main() {

	ifstream in("ratphu.in");
	ofstream out("ratphu.out");

	int p;
	long long n;
	in >> n >> p;

	vector<int> digits;
	while (n) {
		digits.push_back(n % 10);
		n /= 10;
	}

	n = (int)digits.size();

	vector<long long> pw(n + 1, 1);
	for (int i = 1; i <= n; i++) {
		pw[i] = pw[i - 1] * 10;
	}

	vector<vector<long long>> dp((1 << n), vector<long long>(p + 1, 0));
	dp[0][0] = 1;

	for (long long mask = 1; mask < (1LL << n); mask++) {
		int cnt = __builtin_popcount(mask);
		for (int r = 0; r < p; r++) {
			for (int bit = 0; bit < n; bit++) {
				if ((mask & (1 << bit)) != 0) {
					long long val = pw[cnt - 1] * digits[bit], need = (r + p - (val % p)) % p;
					dp[mask][r] += dp[mask ^ (1 << bit)][need];
				}
			}
		}
	}

	out << dp[(1 << n) - 1][0];

	return 0;
}