Pagini recente » Cod sursa (job #2985995) | Cod sursa (job #2747532) | Trasee | Borderou de evaluare (job #80617) | Cod sursa (job #2475988)
#include <fstream>
#include <vector>
using namespace std;
int main()
{
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
long long n, k;
fin >> n >> k;
vector <int> digits;
while (n > 0)
{
digits.push_back(n % 10);
n /= 10;
}
int mxexp = digits.size();
vector < vector <long long> > dp(k, vector <long long>((1 << mxexp), 0));
dp[0][0] = 1;
for (int state = 0;state < (1 << mxexp);++state)
for (int i = 0;i < mxexp;++i)
if ((state & (1 << i)) == 0)
for (int rest = 0;rest < k;++rest)
dp[(rest * 10 + digits[i]) % k][state | (1 << i)] += dp[rest][state];
fout << dp[0][(1 << mxexp) - 1] << "\n" ;
fin.close();
fout.close();
return 0;
}