Pagini recente » Cod sursa (job #935540) | Cod sursa (job #1941737) | Cod sursa (job #2891016) | DeehoroEjkoli | Cod sursa (job #1210440)
#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;
if (B[0]>A[0])
{ for (i=A[0]+1;i<=B[0];) A[i++]=0;
A[0]=B[0];
}
else for (i=B[0]+1;i<=A[0];) B[i++]=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;
while(isEqual()==0)
{
Add(A,one);
result++;
}
g<<result-1<<"\n";
}
int main()
{
Read();
buildVcar();
readAB();
getResult();
return 0;
}