Pagini recente » Cod sursa (job #1578626) | Cod sursa (job #317111) | Cod sursa (job #1446457) | Cod sursa (job #1056304) | Cod sursa (job #433997)
Cod sursa(job #433997)
#include <fstream>
#include <cmath>
using namespace std;
#define MAX 50005
ifstream f("nextseq.in");
ofstream g("nextseq.out");
int N,M,P,X[MAX],Y[MAX],A[MAX],B[MAX],i,j,nr;
inline void sub(int A[], int B[], int N)
{
int i, t = 0;
for (i = 1; i <= A[0]; i++)
A[i] += (t = (A[i] -= B[i] + t) < 0) * N;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
inline void add(int A[], int B[], int N)
{
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=N)
A[i] = (t += A[i] + B[i]) % N;
A[0] = i - 1;
}
inline int comp(int A[], int B[])
{
if (A[0] < B[0]) return -1;
else if (A[0] > B[0]) return 1;
for (int i = A[0]; i > 0; --i)
if (A[i] < B[i]) return -1;
else if (A[i] > B[i]) return 1;
return 0;
}
int main()
{
f >> N >> M >> P;
A[0] = M, B[0] = P;
for (i = 1; i <= N; i++)
f >> X[i];
for (i = 1; i <= M; i++)
f >> A[i];
for (i = 1; i <= P; i++)
f >> B[i];
reverse( A + 1, A + M + 1);
reverse( B + 1, B + P + 1);
sort( X + 1, X + N + 1 );
for (i = 1; i <= N; i++)
Y[X[i]] = i - 1;
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]) res = 1;
}
g << --(--nr);
return 0;
}