Pagini recente » Cod sursa (job #1793190) | Cod sursa (job #982622) | Cod sursa (job #1549859) | Cod sursa (job #3226993) | Cod sursa (job #2348555)
#include <bits/stdc++.h>
using namespace std;
const int mod=666013;
ifstream f("pedefe.in");
ofstream g("pedefe.out");
int n,m,p,i,j,k,cr,S1[510],S2[510],S3[110],aib[510],val[510],dyn[2][510][510];
int sum(int a,int b)
{
return (a+b>=mod)?a+b-mod:a+b;
}
void upd(int poz,int val)
{
for(;poz<=501;poz+=poz&-poz)
aib[poz]=sum(aib[poz],val);
}
int get(int poz)
{
int ret=0;
for(;poz;poz-=poz&-poz)
ret=sum(ret,aib[poz]);
return ret;
}
int main()
{
f>>n>>m>>p;
for(i=1;i<=n;i++)f>>S1[i];
for(i=1;i<=m;i++)f>>S2[i];
for(i=1;i<=p;i++)f>>S3[i];
dyn[0][0][0]=1;cr=1;
for(i=0;i<=p;i++)
{
cr=1-cr;
val[0]=dyn[cr][0][0];
for(j=1;j<=n;j++)
{
memset(aib,0,sizeof(aib));
for(k=1;k<=m;k++)
{
upd(S2[k-1]+1,val[k-1]);
dyn[1-cr][j][k]=0;
if(S1[j]==S2[k])
{
if(S1[j]==S3[i+1]&&i<k)
dyn[1-cr][j][k]=sum(dyn[1-cr][j][k],get(S1[j]+1));
else
dyn[cr][j][k]=sum(dyn[cr][j][k],get(S1[j]+1));
}
val[k]=sum(val[k],dyn[cr][j-1][k]);
}
}
if(i==1)
dyn[0][0][0]=0;
for(j=1;j<=m;j++)
val[j]=0;
}
int ans=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
ans=sum(ans,dyn[cr][i][j]);
g<<ans;
return 0;
}