Cod sursa(job #731892)

Utilizator danalex97Dan H Alexandru danalex97 Data 9 aprilie 2012 13:30:55
Problema NextSeq Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
/*

#include <fstream>
#include <algorithm>
using namespace std;

#define Nmax 10011

int Co,baza;
int N,M,P;
int A[Nmax],B[Nmax],Sir[Nmax];
int Trans[Nmax];

ifstream F("nextseq.in");
ofstream G("nextseq.out");

int cmp()
{
	if ( M!=P )
		return -1;
	else
		for (int i=1;i<=P;++i)
			if ( A[i]!=B[i] )
				return -1;
	return 0;
}

int main(void)
{
	F>>N>>M>>P;
	
	for (int i=1;i<=N;++i)
		F>>Sir[i];
	sort(Sir,Sir+N+1);
	for (int i=1;i<=N;++i)
		Trans[Sir[i]]=i;
	
	for (int i=M;i;--i)
		F>>A[i],A[i]=Trans[A[i]];
	for (int i=P;i;--i)
		F>>B[i],B[i]=Trans[B[i]];
	
	baza=N+1;
	while ( cmp() )
	{
		++A[1];
		
		for (int i=1;A[i]>=baza;++A[i+1],A[i]=0)
			M=max(i,M);
		
		int prog=1;
		for (int i=1;i<=M;++i)
			prog=( A[i]==0 ) ? 0 : prog;
		Co+=prog;
	}
	
	G<<Co;
	
	F.close();
	G.close();
}

*/

#include <fstream>
#include <cmath>
using namespace std;

#define MAX 10005

ifstream f("nextseq.in");
ofstream g("nextseq.out");

int N,M,P,i,j,nr;
short A[MAX],B[MAX],X[MAX],Y[MAX];

int main()
{
    f >> N >> M >> P;
    A[0] = M, B[0] = P;

    for (i = 0; i < N; i++)
        f >> X[i];
    for (i = 0; i < M; i++)
        f >> A[M - i];
    for (i = 0; i < P; i++)
        f >> B[P - i];

    sort( X , X + N );

    for (i = 0; i < N; i++)
        Y[X[i]] = i ;
    for (i = 1; i <= M; i++)
        A[i] = Y[A[i]];;
    for (i = 1; i <= P; i++)
        B[i] = Y[B[i]];

    bool stop = 1, res;

    while ( stop )
    {
        stop = 0;
        res = 0;
        for (i = 1; i <= A[0] ; i++)
        {
            if ( A[i] != B[i] ) stop = 1;
            if ( A[i] < N - 1 && !res )
            {
                res = 1, A[i]++;
                for (j = i - 1; j > 0 ; j--) A[j] = 0;
            }
        }
        if ( !res )
        {
            A[0]++;
            for (i = 1; i < A[0]; i++) A[i] = 0;
        }
        nr++;
        if (A[0] != B[0])  stop = 1;
    }
    g << --(--nr);


    return 0;
}