Cod sursa(job #862102)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 22 ianuarie 2013 10:56:14
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
//Haide steaua:)
#include<stdio.h>
#include<stdlib.h>
 
long n,m,p,a[21000],b[21000],x[21000],h[51000];
void citire(){
	
  freopen("nextseq.in","r",stdin);
  freopen("nextseq.out","w",stdout);
   scanf("%ld %ld %ld",&n,&m,&p);
   
    long i;
    for(i=0;i<n;++i) 
	  scanf("%ld",&x[i]);
    for(i=0;i<m;++i)
		scanf("%ld",&a[m-i]);
    for(i=0;i<p;++i)
	  scanf("%ld",&b[p-i]);
}
 
int cmp(const void*a, const void*b){
  return *(int*)a-*(int*)b;
}
 
void transf(){
	
    qsort(x,n,sizeof(x[0]),cmp);
  
    long i;
	for(i=0;i<n;++i)
	  h[x[i]]=i;
	for(i=1;i<=m;++i)
		a[i]=h[a[i]];
	for(i=1;i<=p;++i)
		b[i]=h[b[i]];
	
  a[0]=m;
  b[0]=p;
}
 
 
void calcul()
{
  long j,sol=0,i,ok,stop;
	ok=1;
	while(ok==1){
      ok=0;
      stop=0;
		for(i=1;i<=a[0];++i){
		  
			if(a[i]!=b[i])
				ok=1;
			if(a[i]<n-1 && stop==0){
				stop=1;
				a[i]++;
				for(j=i-1;j>=1;j--)
					a[j]=0;
			}
		}
		if(stop==0){
			a[0]++;
			for(i=1;i<a[0];++i)
				a[i]=0;
        }
		sol++;
		if (a[0]!=b[0])  
		  ok=1;
    }
  printf("%ld",sol-2);
  
}
int main(){
	
  citire();
  transf();
  calcul();
  
  return 0;
}