Cod sursa(job #553054)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 13 martie 2011 15:19:57
Problema Diviz Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>
#include<string>
#define maxN 210
FILE*f=fopen("diviz.in","r");
FILE*g=fopen("diviz.out","w");

int K,A,B,N,Rez,k,i,ii,j,cf;
int Fap[11][maxN],D1[maxN][105],D2[maxN][105];
char X[maxN];

int main () {
	fscanf(f,"%d %d %d\n",&K,&A,&B);
	fgets(X+1,205,f);	N = strlen(X+1);
	
	for ( i = 1 ; i <= N ; ++i ){
		X[i] = X[i] - '0';
	}
	for ( cf = 0 ; cf <= 9 ; ++cf ){
		for ( i = 1 ; i <= N ; ++i ){
			for ( ii = i ; ii <= N ; ++ii ){
				if ( X[ii] == cf ){
					Fap[cf][i] = ii;
					break;
				}
			}
		}
	}
	for ( cf = 1; cf <= 9 ; ++cf ){
		D1[ Fap[cf][1] ][ cf % K ] = 1;
	}		
	
	for ( j = 1 ; j <= B ; ++j ){
		//lungime j
		for ( i = j ; i <= N ; ++i ){
			//se termina pe pozitia i
			for ( k = 0 ; k < K ; ++k ){
				for ( cf = 0 ; cf <= 9 ; ++cf ){
					D2[ Fap[cf][i+1] ][ (k * 10 + cf ) % K ] += D1[i][k];
					
				}
			}
		}
		if ( j >= A ){
			for ( i = j ; i <= N ; ++i )
				Rez += D1[i][0];
		}
		memcpy(D1,D2,sizeof(D2));
		memset(D2,0,sizeof(D2));
	}
	
	fprintf(g,"%d\n",Rez);
	
	fclose(f);
	fclose(g);
	
	return 0;
}