Cod sursa(job #2560622)

Utilizator mirceamaierean41Mircea Maierean mirceamaierean41 Data 28 februarie 2020 10:14:48
Problema Ratphu Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <deque>
#pragma warning (disable:4996)
using namespace std;

deque <int> c;

long long n, p, dp[1 << 18][20]; //dp[i][j] = numarul de posibilitati cu cifrele din masca i, pentru a se obtine un numar j % p; 

int main()
{
    freopen("ratphu.in", "r", stdin);
    freopen("ratphu.out", "w", stdout);
    scanf("%lld %lld", &n, &p);

    while (n)
    {
        c.push_front(n % 10);
        n /= 10;
    }

    dp[0][0] = 1;
    
    int len = c.size();

    for (int i = 0; i < (1 << len); ++i)
        for (int j = 0; j < p; ++j)
            if (dp[i][j])
                for (int k = 0; k < len; ++k)
                    if ((i & (1 << k)) == 0)
                        dp[i | (1 << k)][(j * 10 + c[k]) % p] += dp[i][j];

    printf("%lld", dp[(1 << len) - 1][0]);

    return 0;
}