Cod sursa(job #465791)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 25 iunie 2010 13:10:39
Problema Ratphu Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 1.23 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE*f=fopen("ratphu.in","r");
FILE*g=fopen("ratphu.out","w");
int p,fr[15],fr2[15],aux,i,ii,vector[20],c;
long long n,nr,nn,maxim;
char ok;

int cmp (int a,int b){
	return a > b;
}

int main () {
	
	fscanf(f,"%lld %d",&n,&p);
	nn = n;
	
	if( p == 1 ){
		
		while(n!=0){
			n /= 10 ;
			++c;
		}
		nr = 1 ;
		for ( i = 1 ; i <= c ; ++i )
			nr = nr * i ;
		fprintf(g,"%lld",nr);
		fclose(f);
		fclose(g);
		exit(0);
		
	}
	
	while(n!=0){
		++fr[n%10] ;
		n /= 10 ;
	}
	
	while ( nn != 0 ){
		vector[++vector[0]] = nn%10 ;
		nn /= 10 ;
	}
	
	sort(vector+1,vector+vector[0]+1,cmp);
	
	for ( i = 1 ; i <= vector[0] ; ++i )
		
		maxim = maxim * 10 + vector[i];
	
	
	for ( i = 1 ; i * p <= maxim ; ++i ){		
		
		aux = i * p ;
		
		while(aux!=0){
			++fr2[aux%10] ;
			aux /= 10 ;
		}
		ok=0;
		for ( ii = 1 ; ii <= 10; ++ii ){
			if( fr[ii] != fr2[ii] ){
				ok = 1;
				break;
			}
		}
		if(ok == 0 )
			++nr;
		
		memset(fr2,0,sizeof(fr2));
	}
	for ( i = 0; i <= 10 ; ++i )
		if( fr[i] != 0 && fr[i] != 1 )
			for ( ii = 2; ii <= fr[i] ; ++ii )
				nr *= ii ;
	
	fprintf(g,"%lld",nr);	
	
	fclose(f);
	fclose(g);
	return 0;
}