Cod sursa(job #528761)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 3 februarie 2011 13:41:36
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <cstdio>
#include <algorithm>

const int MAXP = 20;
const int MAXPP = 262300;
using namespace std;

int P, C[MAXP], c, m, bit, i;
long long sol[MAXPP][MAXP], N;
int main ()
{
	freopen ("ratphu.in", "r", stdin);
	freopen ("ratphu.out", "w", stdout);
	

	for (scanf ("%lld%d\n", &N, &P); N; ) {
		
		C[c++] = N % 10; // c++
		N /= 10;
	}	

	sol[0][0] = 1;
	for (m = 0; m < (1 << c); m++) 
		for (i = 0; i < P; i++) {
			if (!sol[m][i])
				continue;
			for (bit = 0; bit < c; bit++)
				if (!(m & (1 << bit)))
					sol[m | (1 << bit)][(i * 10 + C[bit]) % P] += sol[m][i];
		}
	
	printf ("%lld\n", sol[(1 << c) - 1][0]);
	
	return 0;
}