Cod sursa(job #2256192)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 8 octombrie 2018 10:18:02
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 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];
int mod[201];
string s;

int main() {
    int p;
    in >> s >> p;
    for(int i = 0; i <= 200; i ++)
        mod[i] = i % 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][mod[r * 10 + (s[i] - '0')]] += dp[mask][r];
                }
            }
        }
    }
    out << dp[(1 << n) - 1][0];

    return 0;
}