Cod sursa(job #2783713)

Utilizator NeganAlex Mihalcea Negan Data 14 octombrie 2021 22:11:18
Problema Ratphu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, p;
char s[20];
long long dp[(1 << 18) + 3][20];
int a[25];
long long P[25][25], putere[20];
vector <int> bit[(1 << 18) + 3];
int main()
{
    int i, j;
    fin >> s;
    for(i = 0;s[i];i++)
        a[n++] = s[i] - '0';
    long long N = (1 << n) - 1;
    fin >> p;
    putere[0] = 1;
    for(i = 1;i <= 18;i++)
        putere[i] = 2 * putere[i - 1];
    for(i = 0;i <= 20;i++)
        for(j = 0;j <= 20;j++)
            P[i][j] = (10 * i + a[j]) % p;
    int stare;
    int z;
    for(stare = 0;stare <= N;stare++)
        for(j = 0;j < n;j++)
            if((putere[j] & stare) == 0)
                bit[stare].push_back(j);
    dp[0][0] = 1;
    int k;
    for(stare = 0;stare <= N;stare++)
        for(j = 0;j < p;j++)
            for(k = 0; k < bit[stare].size(); k++)
            {
                z = bit[stare][k];
                dp[stare + putere[z]][P[j][z]] += dp[stare][j];
            }
    fout << dp[N][0];
    return 0;
}