Pagini recente » Cod sursa (job #2538001) | Cod sursa (job #3239637) | Borderou de evaluare (job #508768) | Cod sursa (job #1132559) | Cod sursa (job #822349)
Cod sursa(job #822349)
#include <fstream>
#include <algorithm>
using namespace std;
int N, M, P;
int A[10002], B[10002], S[10002];
int where[10002];
void increment(int* V)
{
++V[1];
for (int i = 1; i <= V[0]; ++i)
if (V[i] > P)
{
++V[i + 1];
V[i] -= P;
if (i == V[0]) ++V[0];
}
}
bool equal(int* V1, int* V2)
{
if (V1[0] != V2[0]) return false;
for (int i = 1; i <= V1[0]; ++i)
if (V1[i] != V2[i])
return false;
return true;
}
int main()
{
ifstream fin("nextseq.in");
ofstream fout("nextseq.out");
fin >> P >> N >> M;
for (int i = 1; i <= P; ++i)
fin >> S[i];
for (int i = 1; i <= N; ++i)
fin >> A[i];
for (int i = 1; i <= M; ++i)
fin >> B[i];
sort(S + 1, S + P + 1);
for (int i = 1; i <= P; ++i)
where[S[i]] = i;
for (int i = 1; i <= N; ++i)
A[i] = where[A[i]];
for (int i = 1; i <= M; ++i)
B[i] = where[B[i]];
A[0] = N;
B[0] = M;
reverse(A + 1, A + N + 1);
reverse(B + 1, B + M + 1);
int result = 0;
while (!equal(A, B))
{
increment(A);
++result;
}
fout << result - 1 << '\n';
fin.close();
fout.close();
}