Cod sursa(job #59613)

Utilizator DastasIonescu Vlad Dastas Data 9 mai 2007 20:58:05
Problema NextSeq Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <cstdio>
#include <cmath>
#define max 10001

FILE *in = fopen("nextseq.in","r"), *out = fopen("nextseq.out","w");

int m, n, p;
int X[max] = {0}, a[max] = {0}, b[max] = {0};
int norm[max] = {0};

int partition(int top, int bottom)
{
     int x = X[top];
     int i = top - 1;
     int j = bottom + 1;
     int temp;
     do
     {
        do
        {
            --j;
        } while ( x < X[j] );

        do
        {
            ++i;
        } while ( x > X[i] );

        if ( i < j )
        {
            temp = X[i];
            X[i] = X[j];
            X[j] = temp;
        }
     } while ( i < j );

     return j;
}

void quicksort(int top, int bottom)
{
    int middle;
    if ( top < bottom )
    {
        middle = partition(top, bottom);
        quicksort(top, middle);
        quicksort(middle+1, bottom);
    }

    return;
}

void readinit()
{
    fscanf(in, "%d %d %d", &n, &m, &p);

    for ( int i = 0; i < n; ++i )
        fscanf(in, "%d", &X[i]);

    quicksort(0, n-1);

    for ( int i = 0; i < n; ++i )
        norm[X[i]] = i;

    for ( int i = 0; i < m; ++i )
    {
        fscanf(in, "%d", &a[i]);
        a[i] = norm[a[i]];
    }
    for ( int i = 0; i < p; ++i )
    {
        fscanf(in, "%d", &b[i]);
        b[i] = norm[b[i]];
    }

    for ( int i = 0; i < m/2; ++i )
    {
        int t = a[i];
        a[i] = a[m-i-1];
        a[m-i-1] = t;
    }
    for ( int i = 0; i < p/2; ++i )
    {
        int t = b[i];
        b[i] = b[p-i-1];
        b[p-i-1] = t;
    }

}

int egale()
{
}

int main()
{
    readinit();

//    for ( int i = 0; i < p; ++i )
//        printf("%d ", a[i]);
//    printf("\n");
//    for ( int i = 0; i < p; ++i )
//        printf("%d ", b[i]);
//    printf("\n");

    int cnt = 0;
    int sol[max] = {0};

    int t = 0;
    for ( int i = 0; i < p; ++i )
    {
        if ( b[i] > a[i] )
            sol[t++] = b[i] - a[i];
        else
            sol[t++] = (b[i] - a[i]) * -1;
    }

    for ( int i = 0; i < t; ++i )
        cnt += sol[i]*pow(4,i);

    fprintf(out, "%d\n", cnt-1);


	return 0;
}