Cod sursa(job #2637863)

Utilizator pregoliStana Andrei pregoli Data 25 iulie 2020 13:53:35
Problema Ratphu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
#define newline '\n'
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
///**********************
using ll = long long;
const int DMAX = 21, STATEMAX = (1 << 18);
ll dp[STATEMAX][DMAX];
int nr[DMAX], nrcif, p;
ll n;

int main() {
    fin >> n >> p;
    while (n) {
        nr[nrcif++] = n % 10;
        n /= 10;
    }
    int finstate = (1 << nrcif) - 1;
    dp[0][0] = 1;
    for (int state = 0; state <= finstate; state++) {
        for (int i = 0; i < nrcif; i++) {
            if (state & (1 << i))
                continue;
            for (int rem = 0; rem < p; rem++) {
                int newState = state | (1 << i);
                int newRem = (rem * 10 + nr[i]) % p;
                dp[newState][newRem] += dp[state][rem];
            }
        }
    }//*/
    fout << dp[finstate][0] << newline;
    fout.close();
    return 0;
}