Pagini recente » Cod sursa (job #268859) | Cod sursa (job #484431) | Cod sursa (job #2871790) | Cod sursa (job #2857959) | Cod sursa (job #1045407)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("nextseq.in");
ofstream cout("nextseq.out");
const int nmax = int(1e4) + 2;
int N, M, P;
int a[nmax], b[nmax], x[nmax], pos[nmax];
int v[nmax];
void readData() {
cin >> N >> M >> P;
for (int i = 0;i < N;i++) {
cin >> x[i];
}
sort (x,x + N);
for (int i = 0;i < N;i++) {
pos[x[i]] = i;
}
for (int i = 0;i < M;i++) {
cin >> a[i];
}
for (int i = 0;i < P;i++) {
cin >> b[i];
}
}
int go1() {
int ret = 1;
for (int i = 0;i < M;i++) {
ret *= (pos[b[i]] - pos[a[i]] + 1);
}
return ret - 2;
}
int go2() {
int ret = 0;
int nr = 1;
for (int i = 1;i <= M;i++) {
nr *= N;
}
for (int i = M + 1;i < P;i++) {
nr *= N;
ret += nr;
}
return ret;
}
int go3(int i,int s) {
int ret = 0;
if (s == 0) {
if (i < M)
for (int j = pos[a[i]];j < N;j++) {
v[i] = x[j];
ret += go3(i + 1,x[j] == a[i] ? 0 : 1);
}
} else {
int nr = 1;
for (int k = 0;k < M - i;k++) {
nr *= N;
}
ret += nr;
}
return ret;
}
int go4(int i,int s) {
int ret = 0;
if (s == 0) {
if (i < P)
for (int j = 0;j <= pos[b[i]];j++) {
v[i] = x[j];
ret += go4(i + 1,x[j] == b[i] ? 0 : 1);
}
} else {
int nr = 1;
for (int k = 0;k < P - i;k++) {
nr *= N;
}
ret += nr;
}
return ret;
}
void solve() {
if (M == P) {
cout << go1() << "\n";
} else {
cout << go2() + go3(0,0) + go4(0,0) << "\n";
}
}
int main()
{
readData();
solve();
return 0;
}