Pagini recente » Cod sursa (job #2630376) | Cod sursa (job #133836) | Cod sursa (job #2084667) | Cod sursa (job #18100)
Cod sursa(job #18100)
#include <stdio.h>
#include <vector>
using namespace std;
#define MAX_N 256
#define FIN "culori.in"
#define FOUT "culori.out"
#define MOD 9901
int N, C[MAX_N<<1], A[MAX_N<<1][MAX_N];
vector<int> pal[MAX_N<<1];
int main(void)
{
int i, j;
vector<int>::iterator it;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &N);
for (i = 0; i < 2*N-1; i++) scanf("%d", C+i);
for (i = 0; i < 2*N-1; i++)
{
for (j = 1; i-j >= 0 && i+j < 2*N-1 && C[i-j] == C[i+j]; j++)
pal[i+j].push_back(2*j);
}
A[0][0] = 1;
for (i = 1; i < 2*N-1; i++)
for (j = 0; j < N; j++)
{
if (j) A[i][j] += A[i-1][j-1];
for (it = pal[i].begin(); it != pal[i].end(); it++)
{
if (j < *it/2) continue;
A[i][j] += A[i-*it][j-*it/2];
while (A[i][j] >= MOD) A[i][j] -= MOD;
}
}
printf("%d\n", A[2*N-2][N-1]);
return 0;
}