Cod sursa(job #46948)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 3 aprilie 2007 11:27:36
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>
#include <stdlib.h>
#define Nmax 10002

    long N,M,P,i,j,a[Nmax];
    long v[Nmax],nrsol,s1[Nmax],s2[Nmax],aux[Nmax];

int comp(void const* a,void const* b){
    return *(long*)a-*(long*)b;
}

int solutie(){
    int i;
    if (M<P)return 1;
    if (M>P)return 0;
    for (i=P;i>=1;i--){
        if (s1[i]<s2[i])return 1;
        if (s1[i]>s2[i])return 0;
    }
    return 0;
}

int main(){
    freopen("nextseq.in","r",stdin);
    freopen("nextseq.out","w",stdout);
    scanf("%d %d %d",&N,&M,&P);
    for (i=1;i<=N;i++)scanf("%d",&a[i]);
    for (i=1;i<=M;i++)scanf("%d",&s1[i]);
    for (i=1;i<=P;i++)scanf("%d",&s2[i]);
    a[0]=-1;
    qsort(a,N+1,sizeof(long),comp);
    for (i=1;i<=N;i++)v[a[i]]=i;
    for (i=1;i<=M;i++)aux[i]=v[s1[M-i+1]];
    for (i=1;i<=M;i++)s1[i]=aux[i];
    for (i=1;i<=P;i++)aux[i]=v[s2[P-i+1]];
    for (i=1;i<=P;i++)s2[i]=aux[i];
    nrsol=0;
    s1[1]++;
    for (i=1;i<=M;i++)if (s1[i]>N){s1[i]=1;s1[i+1]++;if (i==M)M++;}
    while (solutie()){
          //for (i=M;i>=1;i--)printf("%d ",s1[i]);
          //printf("\n");
          nrsol++;
          s1[1]++;
          for (i=1;i<=M;i++)if (s1[i]>N){s1[i]=1;s1[i+1]++;if (i==M)M++;}
    }
    printf("%d\n",nrsol);
    return 0;
}