Cod sursa(job #783953)

Utilizator marinMari n marin Data 4 septembrie 2012 16:26:58
Problema Pedefe Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#define DIM 110
#define MOD 666013

using namespace std;

int A[5*DIM], B[5*DIM], C[DIM];

int S[DIM][5*DIM][5*DIM];

int N, M, K, i, j, k, ii, jj, sol;

int main() {
	ifstream f("pedefe.in");
	ofstream g("pedefe.out");
	f>>N>>M>>K;
	for (i=1;i<=N;i++)
		f>>A[i];
	for (i=1;i<=M;i++)
		f>>B[i];
	for (i=1;i<=K;i++)
		f>>C[i];
	
	S[0][0][0] = 1;
	
	for (k=1;k<=K;k++) {
		for (i=1;i<=N;i++)
			for (j=1;j<=M;j++)
				if (A[i] == B[j] && A[i] == C[k]) {
				//	S[k][i][j] = 1;
					for (ii = 0; ii<i;ii++)
						if (A[ii] <= A[i])
							for (jj=0;jj<j;jj++) {
								S[k][i][j] += S[k-1][ii][jj];
								if (S[k][i][j] >= MOD)
									S[k][i][j] -= MOD;
							}
				} else
					if (A[i] == B[j])
						//S[k-1][i][j] = 0;
						for (ii = 0; ii<i;ii++)
							if (A[ii] <= A[i])
								for (jj=0;jj<j;jj++) {
									S[k-1][i][j] += S[k-1][ii][jj];
									if (S[k-1][i][j] >= MOD)
										S[k-1][i][j] -= MOD;
								}
	}
	
	for (i=1;i<=N;i++)
		for (j=1;j<=M;j++) {
			sol += S[K][i][j];
			if (sol >= MOD)
				sol -= MOD;
		}
	g<<sol<<"\n";
	return 0;
}