Cod sursa(job #2237136)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 31 august 2018 18:41:45
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <algorithm>
#include <iostream>

using namespace std;

ifstream fin ("nextseq.in");
ofstream fout ("nextseq.out");

const int Dim = 10001;
int n,m,p,A[Dim],B[Dim],X[Dim],F[Dim],cnt;
void Increase();
bool Check();


int main() {
	
	fin >> n >> m >> p;
	for ( int i = 1 ; i <= n; ++i)
		fin >> X[i];
	for ( int i = 1; i <= m; ++i)
		fin >> A[i];
	for ( int i = 1; i <= p ; ++i)
		fin >> B[i];
	sort(X+1,X+1+n);
	for ( int i = 1; i <= n; ++i)
		F[X[i]] = i - 1;
	A[0] = m;
	B[0] = p;
	for ( int i = 1; i <= m; ++i)
			A[i] = F[A[i]];
	for ( int i = 1; i <= p; ++i)
			B[i] = F[B[i]];
	for ( int i = 1; i <= m/2; ++i)	
		swap(A[i], A[m-i+1]);
	for ( int i = 1; i <= p/2; ++i)	
		swap(B[i], B[p-i+1]);

	while ( Check()) {
		++cnt;
		Increase();
		
	}
	fout << cnt - 1;
}

bool Check() {
	
	if ( A[0] > B[0] ) 
		return false;
	if ( A[0] < B[0])
		return true;
	for ( int i = A[0]; i >= 1; --i)
		if (A[i] > B[i])
			return false;
		else
			if ( A[i] < B[i] )
				return true;
	return false;
}

void Increase() {
	for ( int i = 1; i <= A[0]; ++i)
		if ( A[i] < n - 1) {
			for ( int j = 1; j < i; ++j)
				A[j] = 0;
			A[i] ++;
			return;
		}
	A[++A[0]] = 0;
	for ( int i= 1; i < A[0]; ++i)
		A[i] = 0;
}