Cod sursa(job #467708)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 29 iunie 2010 23:42:03
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#include <cassert>

using namespace std;

#define MAXN 18
#define MAXP 20
#define LL long long

LL N; int P;
int cif[MAXN];
LL nr[1 << MAXN][MAXP];

int main() {
    freopen("ratphu.in", "rt", stdin);
#ifndef DEBUG
    freopen("ratphu.out", "wt", stdout);
#endif

    scanf("%lld %d", &N, &P);
    assert(1 <= N && N < 1000000000000000000LL);
    assert(1 <= P && P <= 20);

    int len = 0;
    for (; N; N /= 10) {
        cif[len] = N % 10;
        len += 1;
    }
    nr[0][0] = 1;
    for (int i = 0; i < (1 << len); i++) {
        for (int j = 0; j < P; j++) {
            if (!nr[i][j]) {
                continue;
            }
            for (int k = 0; k < len; k++) {
                if (i & (1 << k)) {
                    continue;
                }
                nr[i | (1 << k)][(j * 10 + cif[k]) % P] += nr[i][j];
            }
        }
    }

    printf("%lld\n", nr[(1 << len) - 1][0]);

    return 0;
}