Cod sursa(job #529473)

Utilizator katakunaCazacu Alexandru katakuna Data 5 februarie 2011 11:02:03
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <cstdio>

#define Nmax 22

int p, N;
int c[Nmax];
long long n, a[(1 << 18) + 2][Nmax];

int main () {

	freopen ("ratphu.in", "r", stdin);
	freopen ("ratphu.out", "w", stdout);

	scanf ("%lld %d", &n, &p);  
    N = -1;
	while (n) {
		c[++N] = n % 10;
		n/= 10;
	}

	int i, j, r, m = (1 << (N+1)) - 1;
	for (i = 0; i <= N; i++) 
	    a[1 << i][ c[i] % p ]+= 1;    

	for (i = 1; i <= m; i++) {
		for (r = 0; r < p; r++) {
			for (j = 0; j <= N; j++)	
				if (!(i&(1 << j))) {
					a[ i ^ (1 << j)  ][ (r * 10 + c[j]) % p ]+= a[i][r];           
				}
		}
	}

	printf ("%lld", a[ (1 << (N+1)) - 1][0]);

	return 0;
}