Pagini recente » Cod sursa (job #2743499) | Cod sursa (job #1799710)
#include <bits/stdc++.h>
using namespace std;
/**
Normalizez sirurile a[] si b[]
Pentru ca sunt cel mult 100 de numere intre a si b,
simulez adunarea lui a cu 1 pana ajung la b
*/
int a[10001], b[10001], v[10001];
int M, N, K;
void Citire()
{
int i, x;
ifstream fin("nextseq.in");
fin >> K >> N >> M;
for (i = 1; i <= K; ++i)
{
fin >> x;
v[x] = 1;
}
x = 0;
for (i = 0; i <= 10000; i++)
if (v[i] == 1)
v[i] = x++;
/// acum v[i]=al catelea numar este i in sirul initial
/// citire sirul a:
for (i = 1; i <= N; ++i)
{
fin >> x;
a[i] = v[x];
}
/// citire sirul b:
for (i = 1; i <= M; ++i)
{
fin >> x;
b[i] = v[x];
}
fin.close();
}
/// true daca a[] = b[]
bool Egale()
{
int i;
if (N != M) return false;
for (i = 1; i <= N; ++i)
if (a[i] != b[i]) return false;
return true;
}
void Numara()
{
int i, cnt;
/// oglindesc a si b:
for (i = 1; i <= N / 2; ++i)
swap(a[i], a[N - i + 1]);
for (i = 1; i <= M / 2; ++i)
swap(b[i], b[M - i + 1]);
cnt = 0;
if (Egale()) cnt = 0;
else
{
while (!Egale())
{
cnt++;
for (i = 1; a[i] == K - 1; i++)
a[i] = 0;
a[i]++;
if (i > N) {N++; a[N] = 0;}
}
cnt--;
}
ofstream fout("nextseq.out");
fout << cnt << "\n";
fout.close();
}
int main()
{
Citire();
Numara();
return 0;
}