Pagini recente » Cod sursa (job #240712) | Cod sursa (job #420894) | Cod sursa (job #2359747) | Cod sursa (job #2574537) | Cod sursa (job #2560617)
#include <fstream>
#include <deque>
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
deque <int> c;
int p;
long long n, dp[1 << 18][20]; //dp[i][j] = numarul de posibilitati cu cifrele din masca i, pentru a se obtine un numar j % p;
int main()
{
fin >> n >> p;
while (n)
{
c.push_front(n % 10);
n /= 10;
}
dp[0][0] = 1;
int len = c.size();
for (int i = 0; i < (1 << len); ++i)
for (int j = 0; j < p; ++j)
if (dp[i][j])
for (int k = 0; k < len; ++k)
if ((i & (1 << k)) == 0)
dp[i | (1 << k)][(j * 10 + c[k]) % p] += dp[i][j];
fout << dp[(1 << len) - 1][0] << "\n";
return 0;
}