Cod sursa(job #465840)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 25 iunie 2010 13:31:30
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 0.98 kb
#include <stdio.h>
#define MAXN 25

int T[MAXN];
long long a[(1<<19) + 10][MAXN];
int R[MAXN][MAXN];
int v[MAXN];
char ch;
int i,j,k,P,nr,M;

int main()
{
    freopen("ratphu.in","r",stdin);
    freopen("ratphu.out","w",stdout);

    scanf("%c",&ch);
    nr = -1;
    while (ch!=' '){
        v[++nr] = ch-'0';
        scanf("%c",&ch);
    }
    scanf("%d",&P);
    a[0][0] = 1LL;
    M = (1<<(nr+1));

    for (i=0; i<=nr; ++i)
        T[i] = 1<<i;

    for (i=0; i<P; ++i)
        for (j=0; j<=9; j++)
            R[i][j] = (i*10 + j) % P;

    for (i=0; i<M; ++i)
        for (j=0; j<=nr; ++j)
            if ( !(i & T[j] ) )
                for (k=0; k<P; ++k)
                    a[i | T[j] ][ R[k][v[j]] ] += a[i][k];

    //nu afiseaza bine long long-uri :-??...
    long long x = a[M-1][0];
    nr = 0;
    while (x){
        v[++nr] = x%10;
        x/=10;
    }
    for (i=nr; i>=1; --i)
        printf("%d",v[i]);
    printf("\n");
    return 0;
}