Pagini recente » Cod sursa (job #867147) | Cod sursa (job #96735) | Cod sursa (job #1950852) | Cod sursa (job #2423868) | Cod sursa (job #152370)
Cod sursa(job #152370)
#include <fstream>
#include <algorithm>
using namespace std;
const char iname[] = "pedefe.in";
const char oname[] = "pedefe.out";
#define FOR(i, a, b) for (int i = (a); i <= (b); ++ i)
#define MAXN 505
#define MAXV 505
#define modulo 666013
int A[MAXN], B[MAXN], C[MAXN];
int Cnt[2][MAXN][MAXN];
int main(void)
{
ifstream fin(iname);
int n, m, p;
fin >> n >> m >> p;
FOR (i, 1, n)
fin >> A[i];
FOR (i, 1, m)
fin >> B[i];
FOR (i, 1, p)
fin >> C[i];
fin.close();
if (p == 0) for (;;) ;
int s = 0;
Cnt[s][0][0] = 1;
FOR (i, 1, n)
{
FOR (j, 1, m) if (A[i] == B[j])
{
int &temp = Cnt[s][i][j];
FOR (p, 0, i-1) if (A[p] <= A[i])
FOR (q, 0, j-1)
if ((temp += Cnt[s][p][q]) >= modulo)
temp -= modulo;
}
}
FOR (k, 1, p)
{
s = k & 1;
memset(Cnt[s], 0, sizeof(Cnt[s]));
FOR (i, 1, n)
{
FOR (j, 1, m) if (A[i] == B[j])
{
int &temp = Cnt[s][i][j];
if (A[i] == C[k])
{
FOR (p, 0, i-1) if (A[p] <= A[i])
FOR (q, 0, j-1)
if ((temp += Cnt[s ^ 1][p][q]) >= modulo)
temp -= modulo;
} else {
FOR (p, 0, i-1) if (A[p] <= A[i])
FOR (q, 0, j-1)
if ((temp += Cnt[s][p][q]) >= modulo)
temp -= modulo;
}
}
}
}
int ret = 0;
FOR (i, 1, n) FOR (j, 1, m)
if (A[i] == B[j] && ((p && A[i] == C[p]) || !p))
if ((ret += Cnt[p & 1][i][j]) >= modulo)
ret -= modulo;
ofstream fout(oname);
fout << ret << '\n';
fout.close();
return 0;
}