Cod sursa(job #2587333)

Utilizator alexradu04Radu Alexandru alexradu04 Data 22 martie 2020 17:35:25
Problema Ratphu Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <algorithm>
#define int long long
using namespace std;
long long dp[(1<<18)+1][25];
int digits[20];

signed main() {
    freopen("ratphu.in","r",stdin);
    freopen("ratphu.out","w",stdout);
    int n,p,numberOfDigits=0;
    scanf("%lld %lld",&n,&p);
    do {
        digits[++numberOfDigits]=n%10;
        n/=10;
    }while(n);
    reverse(digits + 1,digits+numberOfDigits + 1);
    dp[0][0]=1;
    for(int i=0;i<(1<<18);++i) {
        for(int j=0;j<p;++j) {
            if(dp[i][j])
                for(int k=1;k<=numberOfDigits;++k) {
                    if((i&(1<<(k-1)))==0) {
                        dp[i|(1<<(k-1))][(j*10+digits[k])%p]+=dp[i][j];
                    }
                }
        }
    }
    printf("%lld",dp[(1<<numberOfDigits)-1][0]);
    return 0;
}