Pagini recente » Cod sursa (job #1934202) | Cod sursa (job #3138190) | Cod sursa (job #2515121) | Cod sursa (job #2599328) | Cod sursa (job #166251)
Cod sursa(job #166251)
#include <stdio.h>
#define MOD 666013
#define aduna(x, y) (((x += y) >= MOD) ? (x -= MOD) : (0))
int N, M, P, S1[512], S2[512], S3[128];
int D[2][505][505], cnt;
int main(void)
{
int i, j, k, p1, p2, crt = 1, prev = 0, w;
freopen("pedefe.in", "r", stdin);
freopen("pedefe.out", "w", stdout);
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]);
D[0][0][0] = 1;
for (k = 1; k <= P; ++k)
{
D[crt][0][0] = 0;
for (i = 1; i <= N; ++i)
for (j = 1; j <= M; ++j)
{
if (S1[i] != S2[j])
continue;
if (S1[i] == S3[k])
w = prev;
else
w = crt;
D[crt][i][j] = 0;
for (p1 = 1; p1 < i; ++p1)
for (p2 = 1; p2 < j; ++p2)
if (S1[p1] == S2[p2] && S1[p1] <= S1[i])
aduna(D[crt][i][j], D[w][p1][p2]);
if (D[w][0][0])
aduna(D[crt][i][j], D[w][0][0]);
}
crt ^= 1; prev ^= 1;
}
for (i = 1; i <= N; ++i)
for (j = 1; j <= M; ++j)
aduna(cnt, D[prev][i][j]);
printf("%d\n", cnt);
return 0;
}