Cod sursa(job #915415)

Utilizator timicsIoana Tamas timics Data 14 martie 2013 23:52:11
Problema NextSeq Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
int a[10010],b[10010],c[10010],N,M,P,ret;

int caut(int x)
{
    int st=1;
    int dr=N;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(c[mij]>x)
            dr=mij-1;
        if(c[mij]<x)
            st=mij+1;
        if(c[mij]==x)
            return mij;
    }
}

void scadere()
{
    int carry=0;
    for(int i=1;i<=b[0];++i)
    {
        int x=b[i]-a[i]+carry;
        b[i]=(x+N)%N;
        carry=(x+N)/N-1;
    }
}
int main()
{
    freopen("nextseq.in","r",stdin);
    freopen("nextseq.out","w",stdout);
    scanf("%d%d%d",&N,&M,&P);
    a[0]=M;
    b[0]=P;
    for(int i=1;i<=N;++i)
        scanf("%d",&c[i]);
    sort(c+1,c+N+1);

    for(int i=1;i<=M;++i)
    {
        scanf("%d",&a[M+1-i]);
        a[M+1-i]=caut(a[M+1-i]);
    }

    for(int i=1;i<=P;++i)
    {
        scanf("%d",&b[P+1-i]);
        b[P+1-i]=caut(b[P+1-i]);
    }
    if(a[0]>b[0])
    {
        printf("%d",0);
        return 0;
    }
    if(a[0]==b[0])
    {
        int i;
        for(i=a[0];i>=1;--i)
            if(a[i]!=b[i])
                break;
        if((a[i]>b[i])||((a[1]==b[1])&&(i=1)))
        {
            printf("%d",0);
            return 0;
        }
    }
    scadere();
    for(int i=b[0];i>=1;--i)
        ret=ret*N+b[i];
    printf("%d",ret-1);
    return 0;
}