Cod sursa(job #1749889)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 29 august 2016 02:07:36
Problema Pedefe Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
/*
 * Brut, urmeaza sa il optimizez...
 */
#include <bits/stdc++.h>
using namespace std;

ifstream in ( "pedefe.in"  );
ofstream out( "pedefe.out" );

const int DIM = 5e2 + 5;
const int MOD = 666013;

int dp[2][DIM][DIM], n, m, p, ans;
int a[DIM], b[DIM], c[DIM];

void add( int &x, int y ) {
    x += y;

    if( x >= MOD )
        x -= MOD;

    return;
}

int main( void ) {

    in >> n >> m >> p;
    for( int i = 1; i <= n; i ++ ) in >> a[i];
    for( int j = 1; j <= m; j ++ ) in >> b[j];
    for( int k = 1; k <= p; k ++ ) in >> c[k];

    dp[0][0][0] = 1;
    for( int k = 0, l = 0; k <= p; k ++, l = 1 - l ) {
        for( int i = 1; i <= n; i ++ ) {
        for( int j = 1; j <= m; j ++ ) {
            if( a[i] != b[j] )
                continue;

            for( int ii = max(k - 1, 0); ii < i; ii ++ ) {
                if( a[ii] > a[i] )
                    continue;

                for( int jj = max(k - 1, 0); jj < j; jj ++ ) {
                    if( a[i] != c[k] )
                        add( dp[l][i][j], dp[l - 0][ii][jj] );
                    else
                        add( dp[l][i][j], dp[1 - l][ii][jj] );
                }
            }

            if( k == p )
                add( ans, dp[l][i][j] );
        }}

        for( int i = 1; i <= n; i ++ )
        for( int j = 1; j <= m; j ++ )
            dp[1 - l][i][j] = 0;
    }

    out << ans;
    return 0;
}