Pagini recente » Cod sursa (job #3123792) | Cod sursa (job #1148833) | Cod sursa (job #773852) | Cod sursa (job #2348518) | Cod sursa (job #2586057)
//
// main.cpp
// ratphu
//
// Created by Eusebiu Rares on 19/03/2020.
// Copyright © 2020 Eusebiu Rares. All rights reserved.
//
#include <iostream>
#include "algorithm"
#include "fstream"
const int MV = 20 ;
std::fstream in ("ratphu.in", std::ios::in) ;
std::fstream out ("ratphu.out", std::ios::out) ;
int cif[MV + 1] ;
long long dp[1 << MV][MV + 1] ;
static void update(int newDigit, int p, int rest, int state) {
if (!(state & (1 << newDigit))) {
dp[state | (1 << newDigit)][(rest * 10 + cif[newDigit]) % p] += dp[state][rest] ;
}
}
static void addDigit(int len, int p, int rest, int state) {
for (int newDigit = 0 ; newDigit < len ; ++ newDigit) {
update(newDigit, p, rest, state);
}
}
static void modify(int len, int p, int rest, int state) {
if (dp[state][rest]) {
addDigit(len, p, rest, state);
}
}
int main(int argc, const char * argv[]) {
long long n ;
int p ; in >> n >> p ;
int len(0) ;
while (n) {
cif[len ++] = n % 10 ;
n /= 10 ;
}
dp[0][0] = 1 ;
for (int state = 0 ; state < (1 << len) ; ++ state) {
for (int rest = 0 ; rest < p ; ++ rest) {
modify(len, p, rest, state);
}
}
out << dp[(1 << len) - 1][0] ;
}