Pagini recente » Cod sursa (job #1519562) | Cod sursa (job #3208677) | Cod sursa (job #2069386) | Cod sursa (job #178897) | Cod sursa (job #2237136)
#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;
}