Pagini recente » Cod sursa (job #154034) | Cod sursa (job #726943) | Cod sursa (job #2867040) | Cod sursa (job #1954447) | Cod sursa (job #446792)
Cod sursa(job #446792)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 510
#define MOD 666013
int n, m, p;
int A[Nmax][Nmax], B[Nmax][Nmax];
int S1[Nmax], S2[Nmax], S3[Nmax];
void citire () {
int i;
scanf ("%d %d %d", &n, &m, &p);
for (i = 1; i <= n; i++)
scanf ("%d", &S1[i]);
for (i = 1; i <= m; i++)
scanf ("%d", &S2[i]);
for (i = 1; i <= p; i++)
scanf ("%d", &S3[i]);
}
void dinamica () {
int i, j, k, ii, jj;
A[0][0] = 1;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (S1[i] == S2[j])
for (ii = i - 1; ii >= 0; ii--)
for (jj = j - 1; jj >= 0; jj--)
if (S1[ii] == S2[jj] && S1[ii] <= S1[i]) {
A[i][j]+= A[ii][jj];
if (A[i][j] >= MOD) A[i][j]-= MOD;
}
for (k = 1; k <= p; k++) {
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (S1[i] == S2[j]) {
if (S1[i] == S3[k]) {
for (ii = i - 1; ii >= 0; ii--)
for (jj = j - 1; jj >= 0; jj--)
if (S1[ii] == S2[jj] && S1[ii] <= S1[i]) {
B[i][j]+= A[ii][jj];
if (B[i][j] >= MOD) B[i][j]-= MOD;
}
}
for (ii = i - 1; ii >= 0; ii--)
for (jj = j - 1; jj >= 0; jj--)
if (S1[ii] == S2[jj] && S1[ii] <= S1[i]) {
B[i][j]+= B[ii][jj];
if (B[i][j] >= MOD) B[i][j]-= MOD;
}
}
for (i = 0; i <= n; i++) {
memcpy (A[i], B[i], sizeof (A[i]));
memset (B[i], 0, sizeof (B[i]));
}
}
int sol = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++) {
sol+= A[i][j];
if (sol >= MOD) sol-= MOD;
}
printf ("%d", sol);
}
int main () {
freopen ("pedefe.in", "r", stdin);
freopen ("pedefe.out", "w", stdout);
citire ();
dinamica ();
return 0;
}