Cod sursa(job #1451450)

Utilizator timicsIoana Tamas timics Data 17 iunie 2015 04:13:48
Problema NextSeq Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 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;
}