Pagini recente » Cod sursa (job #958228) | Cod sursa (job #2472250) | Cod sursa (job #3183137) | Cod sursa (job #1225336) | Cod sursa (job #1718727)
#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;
}