Cod sursa(job #470191)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 11 iulie 2010 23:52:27
Problema Pedefe Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.2 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;

#define file_in "pedefe.in"
#define file_out "pedefe.out"

#define nmax 512

int n,m,l;
int s1[nmax];
int s2[nmax];
int s3[nmax];
int a[nmax][nmax][2];

void citire()
{
    freopen(file_in,"r",stdin);
    //freopen(file_out,"w",stdout);

    scanf("%d %d %d", &n, &m, &l);
    int i;
    for (i=1;i<=n;++i) scanf("%d", &s1[i]);
    for (i=1;i<=m;++i) scanf("%d", &s2[i]);
    for (i=1;i<=l;++i) scanf("%d", &s3[i]);

}

#define mod 666013

void solve()
{
    int i,j,k,p,q,suma,ind;
    a[1][1][1]=a[1][1][0]=1;
    ind=0;
    for (k=1;k<=l;++k, ind^=1)
    {
        /*for (i=1;i<=n;++i)
             for (j=1;j<=m;++j)
                   a[i][j][ind]=0;*/
        for (i=1;i<=n;++i)
              for (j=1;j<=m;++j)
                   if (s1[i]==s2[j])
                   {
                       for (p=1;p<i;++p)
                           //  for (q=1;q<j;++q)
                              if (s1[p]<=s1[i])
                             for (q=1;q<j;++q)
                              {
                                  a[i][j][ind]+=a[p][q][ind];
                                       if (a[i][j][ind]>=mod)
                                           a[i][j][ind]-=mod;

                              if (s3[k]==s1[i])
                               {
                                       a[i][j][ind]+=a[p][q][ind^1];
                                       if (a[i][j][ind]>=mod)
                                           a[i][j][ind]-=mod;
                                   }
                              }
                   }

    }
 /*for (i=1;i<=n;++i)
  {
      for (j=1;j<=m;++j)
          printf("%d ", a[i][j][ind]);
          printf("\n");
  }*/
      suma=0;
       for (i=1;i<=n;++i)
            for (j=1;j<=m;++j)
            {
                suma+=a[i][j][ind];
                if (a[i][j][ind]>=mod)
                    a[i][j][ind]-=mod;
            }

            printf("%d", suma);

}

int main()
{
    citire();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;
}