Pagini recente » Cod sursa (job #1130688) | Cod sursa (job #1565628) | Cod sursa (job #2372302) | Cod sursa (job #120531) | Cod sursa (job #654869)
Cod sursa(job #654869)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define FISIN "culori.in"
#define FISOUT "culori.out"
#define MAXN 256
#define MOD 9901
int n, m;
int mat[2 * MAXN][2 * MAXN];
int input[2 * MAXN];
int main() {
FILE *fin = fopen(FISIN, "rt");
FILE *fout = fopen(FISOUT, "wt");
fscanf(fin, "%d", &n);
m = 2 * n - 1;
for (int i = 0; i < m; ++i) {
fscanf(fin, "%d", input + i);
mat[i][i] = 1;
}
for (int k = 1; k < m; ++k) {
for (int i = 0; i + k < m; ++i) {
int j = i + k;
mat[i][j] = 0;
if (input[i] != input[j]) continue;
mat[i][j] = mat[i + 1][j - 1];
for (int l = i + 1; l < j; ++l) {
/*
printf("Using [%d %d](%d) and [%d %d](%d)\n",
i + 1, l - 1, mat[i + 1][l - 1],
l + 1, j - 1, mat[l + 1][j - 1]);
*/
mat[i][j] += mat[i + 1][l - 1] * mat[l + 1][j - 1];
mat[i][j] %= MOD;
}
// printf("%d %d -> %d\n", i, j, mat[i][j]);
}
}
fprintf(fout, "%d\n", mat[0][m - 1]);
fclose(fout);
fclose(fin);
return 0;
}