Cod sursa(job #553031)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 13 martie 2011 14:08:10
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>
#define maxN 10005
FILE*f=fopen("nextseq.in","r");
FILE*g=fopen("nextseq.out","w");

int Nx,N,M,i,Nr,Fr[maxN],Poz[maxN],A[maxN],B[maxN],z,X[maxN],Rez;

void add() {
	
	if ( A[1] < Nx ){
		++A[1];
		return ;
	}
	
	A[1] = 1; int T = 1;
	int i = 2;
	while ( T && i <= N ){
		if ( A[i] == Nx )
			A[i] = 1;
		else{
			++A[i];
			T = 0;
		}
		++i;
	}
	if ( i > N && T )	N = i,A[N] = 1;
	
}

int cmp () {
	if ( N > M )
		return 1;
	if ( N < M )
		return 0;
	for ( int i = N ; i >= 1 ; --i ){
		if ( A[i] < B[i] )
			return 0;
		if ( A[i] > B[i] )
			return 1;
	}
	return 1;
}

int main () {
	
	fscanf(f,"%d %d %d",&Nx,&N,&M);
	for ( i = 1 ; i <= Nx ; ++i ){
		fscanf(f,"%d",&Nr);
		Fr[Nr] = 1;
	}
	Nx = 0;
	for ( i = 0 ; i <= 10000 ; ++i ){
		if ( Fr[i] ){
			X[++Nx] = i;
			Poz[i] = Nx;
		}
	}
	for ( i = 1 ; i <= N ; ++i ){
		fscanf(f,"%d",&z);
		A[N-i+1] = Poz[z];
	}
	for ( i = 1 ; i <= M ; ++i ){
		fscanf(f,"%d",&z);
		B[M-i+1] = Poz[z];
	}
	
	for ( i = 1; i <= 102 ; ++i ){
		add();
		if ( cmp() ){
			Rez = i - 1;
			break;
		}
	}
	
	fprintf(g,"%d\n",Rez);
	
	fclose(f);
	fclose(g);
	
	return 0;
}