Cod sursa(job #22958)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 27 februarie 2007 21:07:03
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

const int N_MAX = 10010;

int X[N_MAX], A[N_MAX], B[N_MAX], poz[N_MAX];

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

	int N, M, P, x, i, j, g;
	
	scanf("%d %d %d\n", &N, &M, &P);
	for (i = 1; i <= N; i ++) {
		scanf("%d ", &X[i]);
	}
	sort(X + 1, X + N + 1);
	for (i = 1; i <= N; i ++) {
		poz[X[i]] = i;
	}
	
	for (i = M; i >= 1; i --) {
		scanf("%d ", &x);
		A[i] = poz[x];
	}
	for (i = P; i >= 1; i --) {
		scanf("%d ", &x);
		B[i] = poz[x];
	}
	sort(X + 1, X + N + 1);

	int nr = 0;
	while (1) {
		for (i = 1; i <= M + 1 && A[i] == N; i ++);
		A[i] ++;
		if (i == M + 1) {
			M ++;
		}
		for (j = i - 1; j >= 1; j --) {
			A[j] = 1;
		}
		
		/*for (i = 1; i <= M; i ++) {
			printf("%d ", A[i]);
		}
		printf("\n");*/

		g = 1;
		if (M == P) {
			int dif = 0;
			for (i = P; i >= 1; i --) {
				if (A[i] != B[i]) {
					dif = 1;
					if (A[i] < B[i]) {
						nr ++;
						break;
					} else {
						g = 0;
						break;
					}
				}
			}
			if (dif == 0) {
				g = 0;
			}
		} else {
			nr ++;
		}

		if (g == 0) {
			break;
		}
	}
	printf("%d\n", nr);
	
	return 0;
}