Cod sursa(job #1264060)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 15 noiembrie 2014 14:55:01
Problema Ratphu Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <cstring>
#include <vector>

using namespace std;

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

inline void Precalcul()
{
    int i,j;
    for(i=0;i<(1<<n);++i)
        for(j=0;j<n;++j)
            if(((1<<j)&i)==0)
                biti[i].push_back(j);
}

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)][(j*10+a[*it])%p]+=dp[stare][j];
    printf("%lld\n", dp[(1<<n)-1][0]);
    return 0;
}