Cod sursa(job #69044)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 30 iunie 2007 20:51:06
Problema NextSeq Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#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[0]==b[0]) 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++;
    }
  printf("%ld",sol-2);
}
                        
int main()
{
  citire();
  transf();
  calcul();
  return 0;
}