Cod sursa(job #2256188)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 8 octombrie 2018 10:14:56
Problema Ratphu Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;
ifstream in("ratphu.in");
ofstream out("ratphu.out");

const int NMAX = 18;
const int PMAX = 20;

ll dp[1 << NMAX][PMAX];
string s;

int main() {
    int p;
    in >> s >> p;

    int n = s.size();
    dp[0][0] = 1;

    for(int mask = 0; mask < (1 << n); mask ++) {
        for(int r = 0; r < p; r ++) {
            if(dp[mask][r] == 0)
                continue;
            for(int i = 0; i < n; i ++) {
                if((mask & (1 << i)) == 0) {
                    int newmask = mask ^ (1 << i);
                    dp[newmask][(r * 10 + (s[i] - '0')) % p] += dp[mask][r];
                }
            }
        }
    }
    out << dp[(1 << n) - 1][0];

    return 0;
}