Cod sursa(job #611675)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 2 septembrie 2011 17:57:21
Problema Pedefe Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include<stdio.h>
#include<string>

#define maxDim1 505
#define maxDim2 105
#define MOD 666013

FILE*f=fopen("pedefe.in","r");
FILE*g=fopen("pedefe.out","w");

int n,m,p,i,j,ii,jj,k,rez;
int S1[maxDim1],S2[maxDim1],S3[maxDim2],A1[maxDim1][maxDim1],A2[maxDim1][maxDim1];

int main () {
	
	fscanf(f,"%d %d %d",&n,&m,&p);
	for ( i = 1 ; i <= n ; ++i )
		fscanf(f,"%d",&S1[i]);
	for ( i = 1 ; i <= m ; ++i ){
		fscanf(f,"%d",&S2[i]);
	}
	for ( i = 1 ;  i <= p ; ++i ){
		fscanf(f,"%d",&S3[i]);
	}
	
	for ( i = 1 ; i <= n ; ++i ){
		for ( j = 1 ; j <= m ; ++j ){
			if ( S1[i] == S2[j] ){
				A1[i][j] = 1;
				for ( ii = 1 ; ii < i ; ++ii ){
					for ( jj = 1 ; jj < j ; ++jj ){
						if ( S1[ii] <= S1[i] && S2[jj] <= S1[i] ){
							A1[i][j] += A1[ii][jj];
							if ( A1[i][j] >= MOD ) A1[i][j] -= MOD;
						}							
					}
				}
			}
		}
	}
	
	for ( k = 1 ; k <= p ; ++k ){
		for ( i = 1 ; i <= n ; ++i ){
			for ( j = 1 ; j <= m ; ++j ){
				if ( S1[i] == S2[j] ){
					if ( S1[i] == S3[k] ){
						if ( k == 1 )	A2[i][j] = 1;
						for ( ii = 1 ; ii < i ; ++ii ){
							for ( jj = 1 ; jj < j ; ++jj ){
								if ( S1[ii] <= S1[i] && S2[jj] <= S1[i] ){
									A2[i][j] += A1[ii][jj];
									if ( A2[i][j] >= MOD ) A2[i][j] -= MOD;
								}
							}
						}
					}
					else{
						for ( ii = 1 ; ii < i ; ++ii ){
							for ( jj = 1 ; jj < j ; ++jj ){
								if ( S1[ii] <= S1[i] && S2[jj] <= S1[i] ){
									A2[i][j] += A2[ii][jj];
									if ( A2[i][j] >= MOD ) A2[i][j] -= MOD;
								}
							}
						}
					}
				}
			}
		}
		memcpy(A1,A2,sizeof(A2));
		memset(A2,0,sizeof(A2));
	}
	
	for ( i = 1 ; i <= n ; ++i ){
		for ( j = 1 ; j <= m ; ++j ){
			rez += A1[i][j];
			if ( rez >= MOD )	rez -= MOD;
		}
	}
	
	fprintf(g,"%d\n",rez);
	
	fclose(f);
	fclose(g);
	
	return 0;
}