Cod sursa(job #2395846)

Utilizator mihneacazCazacu Mihnea mihneacaz Data 2 aprilie 2019 22:09:07
Problema Ratphu Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<cstdio>
#include<cmath>
using namespace std;
int v[20];
long long dp[262150][25];
int power[20];
void built_pow(int n)
{
    power[0]=1;
    for(int i=1; i<=n; ++i)
        power[i]=power[i-1]<<1;
}
int main()
{
    freopen("ratphu.in","r",stdin);
    freopen("ratphu.out","w",stdout);
    long long n;
    int p;
    scanf("%lld%d",&n,&p);
    int nr=(int)log10(n)+1;
    built_pow(nr);
    for(int i=0; i<nr; ++i)
    {
        v[nr-i-1]=n%10;
        n/=10LL;
    }
    dp[0][0]=1;
    for(int i=0; i<power[nr]; ++i)
    {
        for(int rest=0; rest<p; ++rest)
        {
            for(int b=0; b<nr; ++b)
                if(!(i&power[b]))
                {
                    dp[i+power[b]][(rest*10+v[b])%p]+=dp[i][rest];
                }
        }
    }
    printf("%lld\n",dp[power[nr]-1][0]);
    return 0;
}