Cod sursa(job #1422852)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 19 aprilie 2015 23:19:45
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#include <cstring>

#define NMAX 1 << 18
#define LMAX 21

using namespace std;

int n, m, k;
char s[LMAX];
long long Dp[NMAX][LMAX];

int main() {
    freopen("ratphu.in", "r", stdin);
    freopen("ratphu.out", "w", stdout);
    scanf("%s", s);
    n = strlen(s);
    scanf("%d", &k);
    for(int i = 0; i < n; ++i)
        s[i] -= '0';
    m = (1 << n) - 1;
    Dp[0][0] = 1;
    for(int mask = 0; mask < m; ++mask)
        for(int p = 0; p < k; ++p) {
            if(!Dp[mask][p])
                continue;
            for(int i = 0; i < n; ++i)
                if(!(mask & (1 << i))) {
                    int new_mask = mask | (1 << i);
                    int new_p = (p * 10 + s[i]);
                    while(new_p >= k)
                        new_p -= k;
                    Dp[new_mask][new_p] += Dp[mask][p];
                }
        }
    printf("%lld\n", Dp[m][0]);
    return 0;
}