Cod sursa(job #551633)

Utilizator ChallengeMurtaza Alexandru Challenge Data 10 martie 2011 21:58:42
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <algorithm>

using namespace std;

const char InFile[]="nextseq.in";
const char OutFile[]="nextseq.out";
const int MaxN=10111;
const int MaxX=10111;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,M,P,x,sol,A[MaxN],B[MaxN],X[MaxN],V[MaxX];

inline bool myless()
{
	if(M<P)
	{
		return true;
	}
	for(register int i=M;i>0;--i)
	{
		if(A[i]>B[i])
		{
			return false;
		}
		if(A[i]<B[i])
		{
			return true;
		}
	}
	return false;
}

void inc()
{
	for(register int i=1;i<=M;++i)
	{
		if(A[i]==N)
		{
			A[i]=1;
		}
		else
		{
			++A[i];
			return;
		}
	}
	A[++M]=1;
}

int main()
{
	fin>>N>>M>>P;
	for(register int i=1;i<=N;++i)
	{
		fin>>X[i];
	}
	sort(X+1,X+1+N);
	for(register int i=1;i<=N;++i)
	{
		V[X[i]]=i;
	}
	for(register int i=1;i<=M;++i)
	{
		fin>>x;
		A[i]=V[x];
	}
	for(register int i=1;i<=P;++i)
	{
		fin>>x;
		B[i]=V[x];
	}
	fin.close();

	for(register int i=1;i<=(M>>1);++i)
	{
		swap(A[i],A[M-i+1]);
	}
	for(register int i=1;i<=(P>>1);++i)
	{
		swap(B[i],B[P-i+1]);
	}

	inc();
	while(myless())
	{
		inc();
		++sol;
	}

	fout<<sol;
	fout.close();
	return 0;
}