Pagini recente » Cod sursa (job #329677) | Cod sursa (job #399503) | Cod sursa (job #70343) | Cod sursa (job #1362621) | Cod sursa (job #1786115)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("pedefe.in");
ofstream fout("pedefe.out");
const int MAX = 510;
const int MOD = 666013;
int N, M, K;
int S1[MAX];
int S2[MAX];
int S3[MAX];
int D[2][MAX][MAX];
int s[2][MAX][MAX];
void Read();
void Dyn();
int main()
{
Read();
Dyn();
fin.close();
fout.close();
return 0;
}
void Read()
{
int i;
fin >> N >> M >> K;
for ( i = 1; i <= N; i++ )
fin >> S1[i];
for ( i = 1; i <= M; i++ )
fin >> S2[i];
for ( i = 1; i <= K; i++ )
fin >> S3[i];
}
void Dyn()
{
int i, j, k, q, t, p;
int rez = 0;
bool lc, lp;
/* for ( i = 1; i <= N; i++ )
for ( j = 1; j <= M; j++ )
if ( S1[i] == S2[j] )
{
D[0][i][j]++;
if ( S1[i] == S3[1] )
D[1][i][j]++;
} */
D[0][0][0] = 1;
for ( k = 0, lc = 0, lp = 1; k <= K; k++, lc = !lc, lp = !lp )
for ( i = 0; i <= N; i++ )
for ( j = 0; j <= M; j++ )
{
if ( k >= 1 )
D[lc][i][j] = 0, s[lc][i][j] = 0;
if ( S1[i] == S2[j] )
{
for ( q = 0; q < i; q++ )
if ( S1[q] <= S1[i] )
{
if ( S1[i] != S3[k] )
{
D[lc][i][j] = ( D[lc][i][j] + s[lc][q][j - 1] ) % MOD;
// cout << k << ' ' << q << ' ' << j - 1 << ' ' << s[lc][q][j - 1] << '\n';
}
if ( S1[i] == S3[k] )
{
D[lc][i][j] = ( D[lc][i][j] + s[lp][q][j - 1] ) % MOD;
// cout << k - 1 << ' ' << q << ' ' << j - 1 << ' ' << s[lp][q][j - 1] << '\n';
}
}
// cout << k << ' ' << i << ' ' << j << ' ' << D[lc][i][j] << '\n';; cin.get();
}
if ( j - 1 >= 0 )
s[lc][i][j] = ( s[lc][i][j - 1] + D[lc][i][j] ) % MOD;
else
s[lc][i][j] = D[lc][i][j];
if ( k == K )
{
rez = ( rez + D[lc][i][j] ) % MOD;
// cout << i << ' ' << j << ' ' << D[lc][i][j]; cin.get();
}
}
fout << rez << '\n';
}