Cod sursa(job #2920230)

Utilizator andreimocianAndrei Mocian andreimocian Data 22 august 2022 23:50:49
Problema Ratphu Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream> 
#include <fstream> 
#include <vector>

using namespace std; 

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

const int cif = 18;
int p, n, m;
int a[25];
char s[25];
int dp[(1 << cif) + 5][25], p2[25];
vector < int > bit[(1 << cif) + 5];

void solve()
{
    int z;
    p2[0] = 1;
    for(int i = 1; i <= cif; i++)
        p2[i] = 2 * p2[i-1];
    for(int i = 0; s[i]; i++)
        a[n++] = s[i] - '0';
    m = (1 << n) - 1;
    for(int i = 0; i <= m; i++)
        for(int j = 0; j < n; j++)
            if((p2[j] & i) == 0)
                bit[i].push_back(j);

    dp[0][0] = 1;
    for(int stare = 0; stare <= m; stare++)
        for(int j = 0; j < p; j++)
            for(int k = 0; k < bit[stare].size(); k++)
            {
                z = bit[stare][k];
                dp[stare + p2[z]][(10*j + a[z]) % p] += dp[stare][j];
            }
    fout << dp[m][0];
}

int main()
{ 
    fin >> s >> p;
    solve();
    return 0;
}