Cod sursa(job #1210465)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 20 iulie 2014 00:30:09
Problema NextSeq Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("nextseq.in");
ofstream g("nextseq.out");
int N,M,P;
int Array[10005],Vcar[10005],A[10005],B[10005],one[]={1,1,0};
void Read()
{
    int i;
    f>>N>>M>>P;
    for(i=1;i<=N;i++)
        f>>Array[i];
    sort(Array+1,Array+N+1);
}

void buildVcar()
{
    int i;
    for(i=1;i<=N;i++)
        Vcar[Array[i]]=i;
}

void readAB()
{
    int i;
    for(i=1;i<=M;i++)
    {
        int value;
        f>>value;
        A[i]=Vcar[value];
    }
    for(i=1;i<=P;i++)
    {
        int value;
        f>>value;
        B[i]=Vcar[value];
    }
    reverse(A+1,A+M+1);
    reverse(B+1,B+P+1);
    A[0]=M;
    B[0]=P;
}

void Add(int A[], int B[])
/* A <- A+B */
{ int i,T=0;

  for (i=1;i<=A[0];i++)
    { A[i]+=B[i]+T;
      if(A[i]%N==0)
        T=A[i]/N-1;
      else
        T=A[i]/N;
      A[i]%=N;
      if(A[i]==0)
        A[i]=N;
    }
  if (T) A[++A[0]]=T;
}
bool isEqual()
{
    int i;
    if(A[0]!=B[0])
        return 0;
    for(i=1;i<=A[0];i++)
        if(A[i]!=B[i])
            return 0;
    return 1;
}

void getResult()
{
    int i,result=0;
    bool ok=isEqual();
    while(ok==0)
    {
        Add(A,one);
        result++;
        ok=isEqual();
    }
    g<<result-1<<"\n";
}
int main()
{
    Read();
    buildVcar();
    readAB();
    getResult();
    return 0;
}