Cod sursa(job #2627242)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 10 iunie 2020 11:00:37
Problema Ratphu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb

#include <bits/stdc++.h>

using namespace std;

ifstream fin("ratphu.in");
ofstream fout("ratphu.out");

const int DIM = (1 << 18);
const int P = 20;

long long dp[DIM][P];
int cif[P];
int rest[225];
int it;

main()
{
    long long n;
    int p;
    fin >> n >> p;

    while(n)
    {
        cif[++it] = n % 10;
        n /= 10;
    }

    for(int i = 1; i <= 220; ++i)
        rest[i] = i % p;

    dp[0][0] = 1;
    int mx = (1 << (it)) - 1;

    for(int mask = 0; mask <= mx; ++mask)
        for(int r = 0; r < p; ++r)
            if(dp[mask][r] > 0)
                for(int bit = 0; bit < it; ++bit)
                    if((mask & (1 << bit)) == 0)
                        dp[(mask ^ (1 << bit))][rest[r * 10 + cif[bit + 1]]] += dp[mask][r];

    fout << dp[mx][0] << '\n';
}