Cod sursa(job #1415993)

Utilizator MihneaGhiraMihnea MihneaGhira Data 7 aprilie 2015 01:12:24
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("nextseq.in");
ofstream fout("nextseq.out");
int n,m,p,i,j,t,st,dr,mid,aux;
int A[10005],B[10005],X[10005];

int CautBin(int a){
    st=1;
    dr=p;
    while(st<=dr){
        mid=(st+dr)/2;
        if(a>X[mid])
            st=mid+1;
        else{
            if(a==X[mid])
                break;
            dr=mid-1;
        }
    }
    return mid; //nope,nush dc,pana acum nu facea

}

void add(int A[],int a){
    A[1]+=a;
    int i=1;
    int t=0;
    while(A[i]>p){
        A[i+1]++;
        A[i]%=p;
        i++;
    }
    if(i>A[0])
        A[0]=i;
    return ;
}

bool cond(){
     int ok=1;
     if(A[0]!=B[0])
        return 0;
     for(i=1;i<=A[0];i++)
      if(A[i]!=B[i]){
       ok=0;
       break;
      }
     return ok;
}

int main(){
    fin>>p>>n>>m;
    for(i=1;i<=p;i++)
        fin>>X[i];
    for(i=1;i<=n;i++)
        fin>>A[i];
    for(i=1;i<=m;i++)
        fin>>B[i];
    sort(X+1,X+p+1);
    for(i=1;i<=n;i++){
        A[i]=CautBin(A[i]);//ai dreptate
    }
    for(i=1;i<=m;i++){
        B[i]=CautBin(B[i]);
    }
    for(i=1;i<=n/2;i++){
        aux=A[i];
        A[i]=A[n-i+1];//cred
        A[n-i+1]=aux;
    }
    for(i=1;i<=m/2;i++){
        aux=B[i];
        B[i]=B[m-i+1];
        B[m-i+1]=aux;
    }
    A[0]=n;
    B[0]=m;
    while(cond()==0){
        t++;
        add(A,1);
    }
    fout<<t-1;
    return 0;
}