Cod sursa(job #1144445)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 17 martie 2014 09:27:54
Problema Ratphu Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

long long dp[(1<<18)][20][20];

int main()
{
    int P,a[30],i,j,k,t,N;
    long long sol=0;
    char s[30];
    freopen ("ratphu.in","r",stdin);
    freopen ("ratphu.out","w",stdout);
    scanf("%s%d", (s+1),&P);
    N=strlen(s+1);
    for(i=1;i<=N;++i)
        a[i]=s[i]-'0';
    for(i=1;i<=N;++i)
        dp[(1<<(N-i))][i][a[i]%P]=1;
    for(i=1;i<(1<<N);++i)
        for(j=1;j<=N;++j)
            if((1<<(N-j))&i)
                for(k=0;k<P;++k)
                    for(t=1;t<=N;++t)
                        if(!((1<<(N-t))&i))
                            dp[i+(1<<(N-t))][t][(k*10+a[t])%P]+=dp[i][j][k];
    for(i=1;i<=N;++i)
        sol+=dp[(1<<N)-1][i][0];
    printf("%lld\n", sol);
    return 0;
}