Cod sursa(job #1718726)

Utilizator dani_mocanuDani Mocanu dani_mocanu Data 18 iunie 2016 21:53:58
Problema Ratphu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
const int cif = 18;
int p,a[25],n,M;
char s[25];
long long dp[1 << cif  + 5][25];
vector < int > biti[1 << cif + 5];

inline void Build()
{
    int i,j,x,cnt;
    for(i = 0; s[i]; i++) a[n++] = s[i]-'0';
    M = (1 << n) -1;
    for(i = 0; i <= M; i++)
        for(j = 0; j < n; j++)
            if(((1 << j)&i) == 0)
                biti[i].push_back(j);
}


inline void Solve()
{
    int stare,i,j,k;
    dp[0][0] = 1;
    for(stare = 0; stare <= M; stare++)
        for(j = 0; j < p; j++)
            for(k = 0; k < biti[stare].size(); k++)
                dp[stare + (1 << biti[stare][k])][(10*j + a[biti[stare][k]])%p] += dp[stare][j];
    fout << dp[M][0] << "\n";
}

int main()
{
    fin >> (s) >> p;
    Build();
    Solve();
    fout.close();
    return 0;
}