Cod sursa(job #752184)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 28 mai 2012 00:04:51
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 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;
}