Pagini recente » Cod sursa (job #2473154) | Cod sursa (job #3290639) | Cod sursa (job #62112) | Cod sursa (job #2686499) | Cod sursa (job #2475531)
#include <fstream>
using namespace std;
int n, k;
int dp[20][(1 << 18) + 5];
int mod[20];
int CntBits(int x)
{
int cnt = 0;
while (x > 0)
{
++cnt;
x &= (x - 1);
}
return cnt;
}
int main()
{
///complexitate cam mare, dar ca idee :)
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
fin >> n >> k;
mod[0] = 1 % k;
for (int i = 1;i <= 18;++i)
mod[i] = mod[i - 1] * 10 % k;
dp[0][0] = 1;
int cnt = 0;
while (n > 0)
{
int x = n % 10;
n /= 10;
++cnt;
for (int state = 0;state < (1 << 18);++state)
{
int val = CntBits(state);
if (val != cnt - 1)
continue;
for (int i = 0;i < 18;++i)
if (((1 << i) & state) == 0)
{
for (int j = 0;j < 20;++j)
{
int currrest = j;
int newrest = (j + mod[i] * x) % k;
dp[newrest][state | (1 << i)] += dp[currrest][state];
}
}
}
}
fout << dp[0][(1 << cnt) - 1] << "\n";
fin.close();
fout.close();
return 0;
}