Pagini recente » Cod sursa (job #1242136) | Cod sursa (job #10660) | Cod sursa (job #213524) | Monitorul de evaluare | Cod sursa (job #17621)
Cod sursa(job #17621)
#include <stdio.h>
#include <string.h>
#define MAXN 512
#define MOD 666013
int N, M, P, S1[MAXN], S2[MAXN], S3[MAXN];
int A[2][MAXN][MAXN];
int baga(void)
{
int u = 0, v = 1, i, j, k, j1, k1, r;
for(j = 1; j <= N; j++)
for(k = 1; k <= M; k++)
if(S1[j] == S2[k])
{
A[u][j][k] = 1;
for(j1 = 1; j1 < j; j1++)
for(k1 = 1; k1 < k; k1++)
if(S1[j1] == S2[k1] && S1[j1] <= S1[j])
A[u][j][k] += A[u][j1][k1], A[u][j][k] %= MOD;
}
for(i = 1; i <= P; i++)
{
memset(A[v], 0, sizeof(A[v]));
for(j = 1; j <= N; j++)
for(k = 1; k <= M; k++)
if(S1[j] == S2[k])
{
if(S1[j] == S3[i])
{
if(i == 1)
A[v][j][k] = 1;
for(j1 = 1; j1 < j; j1++)
for(k1 = 1; k1 < k; k1++)
if(S1[j1] == S2[k1] && S1[j1] <= S1[j])
A[v][j][k] += A[u][j1][k1], A[v][j][k] %= MOD;
}
else
{
for(j1 = 1; j1 < j; j1++)
for(k1 = 1; k1 < k; k1++)
if(S1[j1] == S2[k1] && S1[j1] <= S1[j])
A[v][j][k] += A[v][j1][k1], A[v][j][k] %= MOD;
}
}
u ^= 1, v ^= 1;
}
for(r = 0, i = 1; i <= N; i++)
for(j = 1; j <= M; j++)
r += A[u][i][j], r %= MOD;
return r;
}
int main(void)
{
freopen("pedefe.in", "rt", stdin);
freopen("pedefe.out", "wt", stdout);
int i;
scanf("%d %d %d\n", &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]);
printf("%d\n", baga());
return 0;
}