Cod sursa(job #417679)

Utilizator edp100Edp100 edp100 Data 14 martie 2010 18:20:02
Problema NextSeq Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<stdio.h>
#include<algorithm>
#define maxim(a,b) (a>b ? a : b)

using namespace std;

int v[10001],n;
int a[10001],na;
int b[10001],nb;
int f[10001],nr;

int cmp(const int& a,const int& b)
{
    return (a<b);
}

void add ()
{
    int i,t=0;
    a[1]+=1;
    t=a[1]/(n+1);
    if(t)
        a[1]=1;
    for(i=2;t;i++)
    {
        a[i]+=1;
        t=a[i]/n;
        if(t)
            a[i]=1;
    }
    a[0]=maxim(i-1,a[0]);
}

int main ()
{
    int i,st,dr,aux,poz;
    freopen("nextseq.in","r",stdin);
    freopen("nextseq.out","w",stdout);
    scanf("%d%d%d",&n,&na,&nb);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    for(i=1;i<=na;i++)
        scanf("%d",&a[i]);
    for(i=1;i<=nb;i++)
        scanf("%d",&b[i]);
    sort(v+1,v+n+1,cmp);
    for(i=1;i<=n;i++)
        f[v[i]]=i;
    for(i=1;i<=na;i++)
        a[i]=f[a[i]];
    for(i=1;i<=nb;i++)
        b[i]=f[b[i]];
    st=1;dr=na;
    while(st<=dr)
    {
        aux=a[st];
        a[st]=a[dr];
        a[dr]=aux;
        st++;
        dr--;
    }
    st=1;dr=nb;
    while(st<=dr)
    {
        aux=b[st];
        b[st]=b[dr];
        b[dr]=aux;
        st++;
        dr--;
    }
    poz=nb+1;
    if(na==nb)
    {
        while(a[poz-1]==b[poz-1])
            poz--;
    }
    a[0]=na;b[0]=nb;
    while(1)
    {
        add();
        if(a[0]<b[0])
        {
            nr++;
            continue;
        }
        while(poz && a[poz-1]==b[poz-1])
            poz--;
        nr++;
        if(!poz)
            break;
    }
    printf("%d\n",nr-1);
    return 0;
}