Pagini recente » Cod sursa (job #3197749) | Cod sursa (job #336067) | Cod sursa (job #2109787) | Cod sursa (job #290642) | Cod sursa (job #446895)
Cod sursa(job #446895)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 510
#define MOD 666013
int n, m, p;
int A[Nmax][Nmax], B[Nmax][Nmax], Sa[Nmax], Sb[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, jj;
A[0][0] = 1;
Sa[0] = 1;
for (i = 1; i <= n; i++) {
for (j = 1; j <= m; j++) {
if (S1[i] == S2[j])
for (jj = j - 1; jj >= 0; jj--)
if (S2[jj] <= S2[j]) {
A[i][j]+= Sa[jj];
if (A[i][j] >= MOD) A[i][j]-= MOD;
}
}
for (j = 1; j <= m; j++)
Sa[j] = Sa[j] + A[i][j];
}
memset (Sa, 0, sizeof (Sa));
Sa[0] = 1;
for (k = 1; k <= p; k++) {
for (i = 1; i <= n; i++) {
for (j = 1; j <= m; j++) {
if (S1[i] == S2[j]) {
if (S1[i] == S3[k]) {
for (jj = j - 1; jj >= 0; jj--)
if (S2[jj] <= S2[j]) {
B[i][j]+= Sa[jj];
if (B[i][j] >= MOD) B[i][j]-= MOD;
}
}
else {
for (jj = j - 1; jj >= 0; jj--)
if (S2[jj] <= S2[j]) {
B[i][j]+= Sb[jj];
if (B[i][j] >= MOD) B[i][j]-= MOD;
}
}
}
}
for (j = 1; j <= m; j++) {
Sb[j] = Sb[j] + B[i][j];
Sa[j] = Sa[j] + A[i][j];
}
}
memcpy (Sa, Sb, sizeof (Sa));
memset (Sb, 0, sizeof (Sb));
memset (Sa, 0, sizeof (Sa));
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;
}