Pagini recente » Borderou de evaluare (job #1288252) | Borderou de evaluare (job #190632) | Borderou de evaluare (job #1862790) | Cod sursa (job #1969713) | Cod sursa (job #2306167)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
const int MaxCif = 18;
const int MaxP = 20;
string N;
int L, P;
long long D[1<<MaxCif][MaxP];
void Dyn();
int main()
{
fin >> N >> P;
L = N.size();
for (int i = 0; i < L; ++i)
N[i] -= '0';
Dyn();
fout << D[(1 << L) - 1][0];
fin.close();
fout.close();
return 0;
}
void Dyn()
{
D[0][0] = 1;
for (int mask = 0; mask < (1 << L) - 1; ++mask)
for (int r = 0; r < P; ++r)
{
if ( !D[mask][r] )
continue;
for (int k = 0; k < L; ++k)
{
if ( mask & (1 << k) )
continue;
D[mask | (1 << k)][(10*r + N[k]) % P] += D[mask][r];
}
}
}