Pagini recente » Cod sursa (job #324643) | Cod sursa (job #1384649) | Cod sursa (job #3140390) | Cod sursa (job #3267321) | Cod sursa (job #2920386)
#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];
long long 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;
}