Pagini recente » Cod sursa (job #1978711) | Cod sursa (job #679424) | Cod sursa (job #3231275) | Cod sursa (job #2628878) | Cod sursa (job #1718726)
#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;
}