Cod sursa(job #11254)

Utilizator mariusdrgdragus marius mariusdrg Data 30 ianuarie 2007 22:44:03
Problema NextSeq Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

const int maxn = 10000;


typedef int lnum[10000];

lnum a,b;
lnum sol;
int i;
int j;
int n2;
int n;
int n1;
int x;
int ans;
int nr[maxn];


void scadere(lnum &dest,lnum &a,lnum &b)
{
        int i;
        int t=0;
        for(i=1;i<=a[0];i++)
        {
                dest[i]=t;
                t=0;
                dest[i]=a[i]-b[i];
                if (dest[i]<0)
                {
                        t=-1;
                        dest[i]+=n+1;
                }
        }
        dest[0]=a[0];
        while(dest[dest[0]]==0) dest[0]--;
        
}


int main()
{
        freopen("nextseq.in","r",stdin);
        freopen("nextseq.out","w",stdout);
        scanf("%d %d %d",&n,&n1,&n2);
        for(i=1;i<=n;i++)
        {
                scanf("%d",&a[i]);
        }
        sort(a+1,a+n+1);
        for(i=1;i<=n;i++)
        {
                nr[a[i]]=i;
        }
        memset(a,0,sizeof(a));
        a[0]=n1;
        for(i=1;i<=n1;i++)
        {
                scanf("%d",&x);
                a[n1-i+1]=nr[x];
        }
        b[0]=n2;
        for(i=1;i<=n2;i++)
        {
                scanf("%d",&x);
                b[n2-i+1]=nr[x];
        }
        scadere(sol,a,b);
        int p=1;
        for(i=1;i<=sol[0];i++)
        {
                ans+=p*(sol[i]-1);
                p*=n;
        }
        printf("%d",ans+1);
        printf("\n");
        return 0;
}