Cod sursa(job #8787)

Utilizator webspiderDumitru Bogdan webspider Data 25 ianuarie 2007 16:26:42
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

int n1[10001];
int n2[10001];

int ncat;
int done;
int n,m,x;

int nre[10001];
int ind[10001];
int rep[10001];

bool cmpf( const int &a, const int &b )
{
	if ( nre[ a ] <= nre[ b ] ) return 1;
	return 0;
}


int main()
{
	int i;
	int aux;
	freopen("nextseq.in","r",stdin);
	freopen("nextseq.out","w",stdout);

	scanf("%d %d %d\n", &x, &n, &m);

	for ( i = 1; i <= x; i++ )
	{
		scanf("%d ", &nre[i] );
		ind[i] = i;
	}

	sort( ind+1, ind+x+1, cmpf );

	for ( i = 1; i <= x; i++ )
		rep[ nre[ind[i]] ] = i;
	
	for ( i = 1; i <= n; i++ )
	{
		scanf("%d ", &aux );
		n1[n-i+1] = rep[ aux ];
	}
	n1[0] = n;

	for ( i = 1; i <= m; i++ )
	{
		scanf("%d ", &aux );
		n2[m-i+1] = rep[aux];
	}
	n2[0] = m;

	while ( !done )
	{
		ncat++;
		n1[1] ++;
		for ( i = 1; i<= n1[0]; i++ )
			if ( n1[i] > x )
			{
				n1[i+1] += 1;
				n1[i] = 1;
				if ( i == n1[0] && n1[i+1] )
					n1[0]++;
			}
		done = 1;
		for ( i = 0; i <= max( n1[0], n2[0] ); i++ )
			if ( n1[i] != n2[i] ) done = 0;
	}

	printf("%d\n", ncat-1);

	fclose(stdin);
	fclose(stdout);

	return 0;
}