Cod sursa(job #1264061)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 15 noiembrie 2014 14:57:12
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <cstring>
#include <vector>

using namespace std;

char sir[25];
int p,a[25],n,prod[30][30];
vector <int> biti[(1<<18)+5];
long long dp[(1<<18)+5][25];

inline void Precalcul()
{
    int i,j,val;
    for(i=0;i<(1<<n);++i)
        for(j=0;j<n;++j)
            if(((1<<j)&i)==0)
                biti[i].push_back(j);
    for(i=0;i<=20;++i)
    {
        val=i*10;
        for(j=0;j<=20;++j)
            prod[i][j]=(val+j)%p;
    }
}

int main()
{
    int i,stare,j;
    vector <int>::iterator it;
    freopen ("ratphu.in","r",stdin);
    freopen ("ratphu.out","w",stdout);
    scanf("%s %d", sir,&p);
    n=strlen(sir);
    Precalcul();
    for(i=0;i<n;++i) a[i]=sir[i]-'0';
    dp[0][0]=1;
    for(stare=0;stare<(1<<n)-1;++stare)
        for(j=0;j<p;++j)
            for(it=biti[stare].begin();it!=biti[stare].end();++it)
                dp[stare|(1<<*it)][ prod[j][a[*it]] ]+=dp[stare][j];
    printf("%lld\n", dp[(1<<n)-1][0]);
    return 0;
}