Pagini recente » Cod sursa (job #3002882) | Cod sursa (job #3031979) | Cod sursa (job #64187) | Cod sursa (job #2193861) | Cod sursa (job #59584)
Cod sursa(job #59584)
#include <stdio.h>
#include <bitset>
#define MOD 9901
#define MOD2 98029801
using namespace std;
unsigned short s[512][512];
short c[512];
bitset<512> ok[512];
unsigned short mem(int x, int y)
{
if(ok[x][y])
return s[x][y];
ok[x][y]=1;
int rez=0;
if(c[x]==c[y])
{
rez=mem(x+1, y-1);
int i;
for(i=x+2;i<y;i+=2)
if(c[x]==c[i])
{
rez+=mem(x+1,i-1)*mem(i,y);
if(rez > MOD2)
rez-=MOD2;
}
}
s[x][y]=rez%MOD;
return s[x][y];
}
int main()
{
freopen("culori.in","r",stdin);
freopen("culori.out","w",stdout);
int i,n,j;
#define dim 10000
char buf[dim];int poz = 0;
fread(buf,1,dim,stdin);
#define cit(x) \
{ \
x = 0; \
while(buf[poz] < '0') \
++poz; \
while(buf[poz] >= '0') \
x = x*10 + buf[poz++] - '0'; \
}
//scanf("%d", &n);
cit(n);
n*=2;
for(i=1;i<n;++i)
for(j=0;j<=i;++j)
ok[i][j]=1,s[i][j]=1;
for(i=1;i<n;++i)
// scanf("%d", c+i);
cit(c[i]);
printf("%d\n", mem(1,n-1));
return 0;
}