Cod sursa(job #17621)

Utilizator astronomyAirinei Adrian astronomy Data 16 februarie 2007 14:34:14
Problema Pedefe Scor 25
Compilator c Status done
Runda Arhiva de probleme Marime 1.95 kb
#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;
}