Cod sursa(job #1345819)

Utilizator AndreiBarbutaAndrei Barbuta AndreiBarbuta Data 17 februarie 2015 21:28:30
Problema Ratphu Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>

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

const int MAXr = 25 ;
const int MAXm = ( 1 << 18 ) + 5 ;

using namespace std;

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

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

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