Cod sursa(job #69024)

Utilizator FlorianFlorian Marcu Florian Data 30 iunie 2007 20:11:57
Problema NextSeq Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
//95 de puncte
#include<stdio.h>
#include<stdlib.h>
FILE*f=fopen("nextseq.in","r");
FILE*g=fopen("nextseq.out","w");
long n,m,p,a[21000],b[21000],x[21000],h[51000];
void read()
        {
        fscanf(f,"%ld %ld %ld",&n,&m,&p);
        long i;
        for(i=0;i<n;++i) fscanf(f,"%ld",&x[i]);
        for(i=0;i<m;++i) fscanf(f,"%ld",&a[m-i]);
        for(i=0;i<p;++i) fscanf(f,"%ld",&b[p-i]);
        }
int cmp(const void*a, const void*b)
        {
        return *(int*)a-*(int*)b;
        }
void transform()
        {
        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 solve()
        {
        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++;
                }
          fprintf(g,"%ld",----sol);
          }
                        
int main()
        {
        read();
        transform();
        solve();
        return 0;
        }