Cod sursa(job #218486)

Utilizator Matei14Popa-Matei Mihai Matei14 Data 2 noiembrie 2008 11:55:57
Problema NextSeq Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
#include<stdlib.h>
#define N 10002
int v[N],a[N],y[N],b[N],A[N],e[N];
int n,m,p,k=0,s=1,w,max=0,r;

int compar(const void *tai,const void *nij)
{
	int aa=*(int*)tai,bb=*(int*)nij;
	return aa-bb;
}

void citire()
{
	int i;
	scanf("%d%d%d",&n,&p,&m);
	for(i=0;i<n;++i)
		scanf("%d",&y[i]);
	qsort(y,n,sizeof(y[1]),compar);
	for(i=0;i<n;++i)
		v[y[i]]=i;
}
int compar(){
	if(m>p)
		return 1;
	else
		if(m<p)
			return 0;
	for(int i=m-1;i>=0;--i)
		if(e[i]<b[i])
			return 1;
		else
			if(e[i]>b[i])
				return 0;
	return 0;
}

void funct(int i){
	e[i]=v[a[i]];
	e[i-1]++;
	if(e[i-1]>n)
		funct(i-1);
}
void cond(){
	for(int i=0;i<p;++i)
		if(e[i]<n)
			return ;
	p++;
	for(int i=0;i<p;++i)
		e[i]=1;
	s++;
}
int main(){
	int i;
	freopen("nextseq.in","r",stdin);
	freopen("nextseq.out","w",stdout);
	citire();
	for(i=p-1;i>=0;--i){
		scanf("%d",&a[i]);
		e[i]=v[a[i]];
	}
	for(i=m-1;i>=0;--i)
		scanf("%d",&b[i]);
	e[0]++;
	while(compar()){
		cond();
		if(e[p-1]>=n)
			funct(p-1);
		else
			e[p-1]++;
		s++;
	}
	printf("%d\n",s);
	fclose(stdin);
	fclose(stdout);
	return 0;
}