Cod sursa(job #1775154)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 9 octombrie 2016 22:19:42
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 0.8 kb
#include<bits/stdc++.h>
using namespace std;
long long n;
int p,v[25],dv,mask,x;
long long dp[(1<<20)+5][25];
int main()
{
    freopen("ratphu.in","r",stdin);
    freopen("ratphu.out","w",stdout);
    scanf("%lld",&n);
    scanf("%d",&p);
    while(n)
    {
        v[++dv]=n%10;
        n/=10;
    }
    for(int i=1;i<=dv;i++)
    {
        mask=(1<<(dv-i));
        dp[mask][(v[i]%p)]+=1LL;
    }
    x=(1<<dv)-1;
    for(int mask=0;mask<=x;mask++)
    {
        for(int j=1;j<=dv;j++)
        {
            if(!(mask & (1<<(dv-j))))
            {
                for(int rest=0;rest<p;rest++)
                {
                    dp[mask|(1<<(dv-j))][(rest*10+v[j])%p]+=dp[mask][rest];
                }
            }
        }
    }
    printf("%lld\n",dp[x][0]);
    return 0;
}