Cod sursa(job #846579)

Utilizator stoicatheoFlirk Navok stoicatheo Data 2 ianuarie 2013 14:41:42
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>
#include<cstring>

FILE*f=fopen("ratphu.in","r");
FILE*g=fopen("ratphu.out","w");

int n,p;
int mod[305];
char sir[20];
long long D[20][1<<17];

int main () {

    fscanf(f,"%s %d",sir,&p);
    n = strlen(sir);

    for ( int i = 0 ; i < n ; ++i ){
        sir[i] -= '0';
        D[sir[i]%p][1<<i] = 1;
    }

    for ( int i = 0 ; i <= 300 ; ++i ){
        mod[i] = i % p;
    }

    for ( int conf = 1 ; conf < (1<<n) ; ++conf ){
        if ( !(conf & (conf-1)) ){
            continue ;
        }

        for ( int i = 0 ; i < n ; ++i ){
            if ( conf & (1<<i) ){
                int previous = conf ^ (1<<i);

                for ( int rest = 0 ; rest < p ; ++rest ){
                    D[mod[rest*10+sir[i]]][conf] += D[rest][previous];
                }
            }
        }
    }

    fprintf(g,"%lld\n",D[0][(1<<n)-1]);

    fclose(f);
    fclose(g);

    return 0;
}