Cod sursa(job #470196)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 12 iulie 2010 10:04:11
Problema Pedefe Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.31 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[0][0][0]=1;
    ind=0;
    for (k=0;k<=l;++k, ind^=1)
    {
        for (i=1;i<=n;++i)
             for (j=1;j<=m;++j)
                   a[i][j][ind]=0;
        for (i=k;i<=n;++i)
              for (j=k;j<=m;++j)
                   if (s1[i]==s2[j])
                   {
                       for (p=max(k-1,0);p<i;++p)
                           //  for (q=1;q<j;++q)
                              if (s1[p]<=s1[i])
                             for (q=max(k-1,0);q<j;++q)
                              {
                              if (s3[k]!=s1[i])
                                  {
                                      a[i][j][ind]+=a[p][q][ind];
                                       if (a[i][j][ind]>=mod)
                                           a[i][j][ind]-=mod;
                                  }
                                  else

                               {
                                       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");
  }*/
  ind=l%2;
      suma=0;
       for (i=1;i<=n;++i)
            for (j=1;j<=m;++j)
            {
                suma+=a[i][j][ind];
                if (suma>=mod)
                    suma-=mod;
            }

            printf("%d", suma);

}

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

    fclose(stdin);
    fclose(stdout);

    return 0;
}