Cod sursa(job #490183)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 5 octombrie 2010 13:11:08
Problema NextSeq Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int zeroinit,cif,nr,n,m,p,v[1<<14],a[1<<14],b[1<<14],cor[1<<14];
void read()
{
    freopen("nextseq.in","r",stdin);
    freopen("nextseq.out","w",stdout);
    scanf("%d%d%d",&n,&m,&p);
    for(int i=1;i<=n;i++)
        scanf("%d",&v[i]);
    for(int i=1;i<=m;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=p;i++)
        scanf("%d",&b[i]);
}
void norm()
{
    sort(v+1,v+n+1);
    v[0]=-1;
    for(int i=1;i<=n;i++)
        if(v[i]!=v[i-1])
            cor[v[i]]=++cif;
    for(int i=1;i<=m;i++)
        a[i]=cor[a[i]];
    for(int i=1;i<=p;i++)
        b[i]=cor[b[i]];
}
void egal()
{
    while(m<p)
    {
        ++m;
        for(int i=m;i>=1;i--)
            a[i]=a[i-1];
        a[1]=cor[0];
    }
}
bool comp()
{
    for(int i=1;i<=m;i++)
        if(a[i]<b[i])
            return true;
        else if(a[i]>b[i])
            return false;
    return false;
}
void next()
{
    bool ok=false;
    int poz=m;
    while(!ok)
    {
        for(int i=a[poz]+1;i<=cif && !ok;i++)
            a[poz]=i, ok=true;
        if(!ok)
        {
            a[poz]=1;
            poz--;
        }
    }
}
int main()
{
    read();
    norm();
    egal();
    while(comp())
    {
        next();
        nr++;
    }
    printf("%d",nr-1);
    return 0;
}