Pagini recente » Cod sursa (job #2082066) | Cod sursa (job #507370) | Cod sursa (job #2134694) | Cod sursa (job #1235321) | Cod sursa (job #1429848)
#include <stdio.h>
#define MAXCIF 18
#define MAXP 20
long long d[1 << MAXCIF][MAXP];
int nrcif = 0;
int mod[210];
char cif[MAXCIF], v[MAXCIF];
int main(){
FILE *in = fopen("ratphu.in", "r");
long long n;
int p;
fscanf(in, "%lld%d", &n, &p);
fclose(in);
while(n > 0){
cif[nrcif] = n % 10;
n /= 10;
nrcif++;
}
d[0][0] = 1;
int i, j, k = 0, vk = 0, nrk;
for(i = 1; i < 210; i++){
mod[i] = mod[i - 1] + 1;
if(mod[i] == p)
mod[i] = 0;
}
for(i = 0; i < (1 << nrcif); i++){
nrk = 0;
for(k = 0; k < nrcif; k++){
if(!(i & (1 << k))){
v[nrk] = k;
nrk++;
}
}
for(j = 0; j < p; j++){
for(k = 0; k < nrk; k++){
if(!(i & (1 << v[k]))){
d[i ^ (1 << v[k])][mod[j * 10 + cif[v[k]]]] += d[i][j];
}
}
}
}
FILE *out = fopen("ratphu.out", "w");
fprintf(out, "%lld", d[(1 << nrcif) - 1][0]);
fclose(out);
return 0;
}