Cod sursa(job #1821112)

Utilizator LucianTLucian Trepteanu LucianT Data 2 decembrie 2016 17:28:36
Problema Pedefe Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>
#define maxN 505
#define MOD 666013
using namespace std;
int n,m,k,i,j,p,line,sol,q;
int cnt[maxN];
int s1[maxN],s2[maxN],s3[maxN];
int dp[2][maxN][maxN],sp[2][maxN][maxN];
int main()
{
    freopen("pedefe.in","r",stdin);
    freopen("pedefe.out","w",stdout);
    scanf("%d %d %d",&n,&m,&k);
    for(i=1;i<=n;i++)
        scanf("%d",&s1[i]);
    for(i=1;i<=m;i++)
        scanf("%d",&s2[i]);
    for(i=1;i<=k;i++)
        scanf("%d",&s3[i]);
    dp[0][0][0]=1;
    for(p=0,line=0;p<=k;p++,line=1-line)
        for(i=0;i<=n;i++)
            for(j=0;j<=m;j++)
            {
                if(p>0)
                    dp[line][i][j]=sp[line][i][j]=0;
                if(s1[i]==s2[j])
                    for(q=0;q<i;q++)
                        if(s1[q]<=s1[i])
                            if(s1[i]!=s3[p])
                                dp[line][i][j]=(dp[line][i][j]+sp[line][q][j-1])%MOD;
                            else dp[line][i][j]=(dp[line][i][j]+sp[1-line][q][j-1])%MOD;
                if(j>0)
                    sp[line][i][j]=(sp[line][i][j-1]+dp[line][i][j])%MOD;
                else sp[line][i][j]=dp[line][i][j];
            }
    for(i=0;i<=n;i++)
        for(j=0;j<=m;j++)
            sol=(sol+dp[1-line][i][j])%MOD;
    printf("%d",sol);
    return 0;
}