Cod sursa(job #478386)

Utilizator CezarMocanCezar Mocan CezarMocan Data 18 august 2010 12:10:26
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <algorithm>
#include <cstdio>
#include <vector>

#define maxCif 19
#define maxP 22

using namespace std;

long long N;
int P;
long long D[1 << 18][maxP];
vector <int> digits;

int main() {
	int i, j;
	freopen("ratphu.in", "r", stdin);
	freopen("ratphu.out", "w", stdout);

	scanf("%lld%d", &N, &P);

	D[0][0] = 1;
	
	while (N > 0) {
		digits.push_back(N % 10);
		N /= 10;
	}

//	printf("%d\n", digits.size());

//	reverse(digits.begin(), digits.end());

	for (int mask = 0; mask < (1 << digits.size()); mask++)
		for (i = 0; i < P; i++) {
//			printf("%d %d  %lld\n", mask, i, D[mask][i]);
			for (j = 0; j < digits.size(); j++)
				if ((mask & (1 << j)) == 0) {
					D[mask | (1 << j)][(i * 10 + digits[j]) % P] += D[mask][i];
				}
		}
	
	printf("%lld\n", D[(1 << digits.size()) - 1][0]);


	return 0;
}