Pagini recente » Cod sursa (job #2515572) | Cod sursa (job #1318653) | Cod sursa (job #1785585) | Cod sursa (job #2476595) | Cod sursa (job #638728)
Cod sursa(job #638728)
#include<stdio.h>
#include<string.h>
#define MOD 3210121
#define NMAX 505
int nr1,nr2,sol;
int d[2][NMAX][NMAX];
char s1[NMAX],s2[NMAX];
int main ()
{
int i,j,k,t;
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
scanf("%s",s1);
nr1=strlen(s1);
for(i=nr1;i>=1;i--)
s1[i]=s1[i-1];
scanf("%s",s2);
nr2=strlen(s2);
for(i=nr2;i>=1;i--)
s2[i]=s2[i-1];
int jum=(nr1+nr2)/2;
d[0][0][0]=1;
for(i=0;i<=nr1;i++)
for(j=0;i+j<=nr1;j++)
for(k=0;k<=nr2;k++)
{
if(i)
d[i&1][j][k]=0;
if((!i && !j && !k) || i+k<j)
continue;
t=i+k-j;
if(k+t>nr2)
continue;
if(i && j && s1[i]==s1[nr1-j+1])
d[i&1][j][k]+=d[(i-1)&1][j-1][k];
if(i && t && s1[i]==s2[nr2-t+1])
d[i&1][j][k]+=d[(i-1)&1][j][k];
if(k && j && s2[k]==s1[nr1-j+1])
d[i&1][j][k]+=d[i&1][j-1][k-1];
if(k && t && s2[k]==s2[nr2-t+1])
d[i&1][j][k]+=d[i&1][j][k-1];
while(d[i&1][j][k]>=MOD)
d[i&1][j][k]-=MOD;
if(i+k!=jum || j+t!=jum)
continue;
if(((nr1+nr2)&1)==0 && (i+j==nr1) && (k+t==nr2))
{
sol+=d[i&1][j][k];
if(sol>=MOD)
sol-=MOD;
}
else if(((nr1+nr2)&1)==1 && ((i+j==nr1 && k+t==nr2-1) || (i+j==nr1-1 && k+t==nr2)))
{
sol+=d[i&1][j][k];
if(sol>=MOD)
sol-=MOD;
}
}
printf("%d\n",sol);
return 0;
}