Cod sursa(job #1362331)

Utilizator AndreiBarbutaAndrei Barbuta AndreiBarbuta Data 26 februarie 2015 11:52:57
Problema Ratphu Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <cstring>

#define IN "ratphu.in"
#define OUT "ratphu.out"

const int MAXr = 30 ;
const int MAXm = ( 1 << 20 ) ;

using namespace std;

ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;

long long d [ MAXm ] [ MAXr ] ;
int dig [ MAXr ] ;
long long nr ;

int main()
{
    int p , n = 0 ;
    fin >> nr >> p ;
    while ( nr ) {
        dig [ n ] = nr % 10 ;
        nr /= 10 ;
        n ++ ;
    }
    d [ 0 ] [ 0 ] = 1 ;
    for ( int mask = 0 ; mask < ( 1 << n ) ; ++ mask )
        for ( int r = 0 ; r < p ; ++ r )
            if ( d [ mask ] [ r ] )
                for ( int c = 0 ; c < n ; ++ c )
                    if ( !( mask & ( 1 << c ) ) ){
                        int r2 = r * 10 + dig [ c ] ;
                        while ( r2 >= p )
                            r2 -= p ;
                        d [ mask | ( 1 << c ) ] [ r2 ] += d [ mask ] [ r ] ;
                    }
    fout << d [ ( 1 << n ) - 1 ] [ 0 ] ;
    fin.close () ;
    fout.close () ;
    return 0;
}