Cod sursa(job #470189)

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

      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;
}