Cod sursa(job #465846)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 25 iunie 2010 13:33:05
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 0.82 kb
#include <stdio.h>

using namespace std;

#define maxc 18
#define maxr 22

long n, r, i, j, k, pt, v[maxc+10], conf[maxc+10];
long long d[(1<<maxc)+100][maxr];
long long nr;

int main()
{
    freopen("ratphu.in", "r", stdin);
    freopen("ratphu.out", "w", stdout);
    scanf("%lld%d", &nr, &r);
    while(nr>0)
    {
        v[++v[0]]=nr%10;
        nr=nr/10;
    }
    n=v[0];
    d[0][0]=1;
    for(i=0; i<(1<<n)-1; ++i)
    {
        pt=1;
        for(j=0; j<n; ++j)
        {
            conf[j]=((i>>j)&1);
            if(conf[j])
                pt=(pt*10)%r;
        }
        for(j=0; j<r; ++j)
        {
            if(d[i][j]==0) continue;
            for(k=0; k<n; k++)
                if(conf[k]==0)
                    d[i|(1<<k)][(j+(pt*v[k+1]))%r]+=d[i][j];
        }
    }
    printf("%lld\n", d[(1<<n)-1][0]);
    return 0;
}