Cod sursa(job #2816987)

Utilizator Andrei_TudorAndrei Tudor Andrei_Tudor Data 12 decembrie 2021 17:46:40
Problema Ratphu Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <vector>
using namespace std;
long long dp[(1 << 19)][20];
int main(){
    ifstream cin("ratphu.in");
    ofstream cout("ratphu.out");
    long long n;
    int p;
    cin >> n >> p;
    dp[0][0] = 1;
    vector <int> cif;
    long long cn = n;
    while(cn > 0){
        cif.push_back(cn % 10);
        cn /= 10;
    }
    vector <int> zeros;
    for(int mask = 0; mask < (1 << cif.size()); ++ mask){
        for(int bit = 0; bit < cif.size(); ++ bit){
            if(mask & (1 << bit)){
                continue;
            }
            zeros.push_back(bit);
        }
        for(int rest = 0; rest < p; ++ rest){
            for(auto &bit : zeros){
                dp[mask | (1 << bit)][(rest * 10 + cif[bit]) % p] += dp[mask][rest];
            }
        }
        zeros.clear();
    }
    cout << dp[(1 << cif.size()) - 1][0]; 
    return 0;
}