Cod sursa(job #3363750)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 21 august 2026 23:58:14
Problema Culori Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
// Ilie "The-Winner" Dumitru
// Dumnezeu sa o ierte
#include<bits/stdc++.h>
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define err(...) fprintf(stderr, __VA_ARGS__)
using ll=long long;
using dbl=long double;
constexpr int NMAX=512;
constexpr ll MOD=9'901;

int N;
int v[NMAX];
int dp[NMAX][NMAX][2];

int run()
{
	int i, j, k;

	for(i=N-1;i>-1;--i)
	{
		dp[i][i][0]=1;
		dp[i][i][1]=0;
		for(j=i+2;j<N;j+=2)
		{
			if(v[i]==v[j])
			{
				dp[i][j][0]=dp[i+1][j-1][0]+dp[i+1][j-1][1];
				for(k=i+2;k<j;k+=2)
					if(v[i]==v[k])
						dp[i][j][1]+=dp[i][k][0]*(dp[k][j][0]+dp[k][j][1])%MOD;
			}
			dp[i][j][0]%=MOD;
			dp[i][j][1]%=MOD;
		}
	}

	return (dp[0][N-1][0]+dp[0][N-1][1])%MOD;
}

int main()
{
	FILE* f=fopen("culori.in", "r"), *g=fopen("culori.out", "w");
	int i;

	fscanf(f, "%d", &N);
	N=N*2-1;
	for(i=0;i<N;++i)
		fscanf(f, "%d", v+i);
	fprintf(g, "%d\n", run());

	fclose(f);
	fclose(g);
	return 0;
}