Cod sursa(job #1370724)

Utilizator smaraldaSmaranda Dinu smaralda Data 3 martie 2015 16:41:10
Problema Ratphu Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>

int p, ncif, d[1 << 18][25], notUsed[25], dig[25];

void bkt (int k, int cfig) {
    if(k == ncif) {
        int i, r, rnew;

        for(r = 0; r < p; ++ r)
            for(i = 1; i <= notUsed[0]; ++ i) {
                rnew = (r * 10 + dig[notUsed[i]]) % p;
                d[cfig | (1 << notUsed[i])][rnew] += d[cfig][r];
            }
        return;
    }

    notUsed[++ notUsed[0]] = k;
    bkt(k + 1, cfig);

    -- notUsed[0];
    bkt(k + 1, cfig | (1 << k));
}

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

    scanf("%lld%d", &n, &p);
    ncif = -1;
    do {
        dig[++ ncif] = n % 10;
        n /= 10;
    }while(n);
    
    ++ncif;
    d[0][0] = 1;
    bkt(0, 0);  

    printf("%d\n", d[(1 << ncif) - 1][0]);
    return 0;
}