Pagini recente » Cod sursa (job #52849) | Cod sursa (job #2031650) | Cod sursa (job #1174325) | Cod sursa (job #253363) | Cod sursa (job #654871)
Cod sursa(job #654871)
#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 = 2; k < m; k += 2) {
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 + 2; l < j; l += 2) {
/*
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;
}