Pagini recente » Cod sursa (job #1802711) | Cod sursa (job #864789) | Cod sursa (job #2265772) | Cod sursa (job #971904) | Cod sursa (job #184289)
Cod sursa(job #184289)
#include <stdio.h>
#include <string.h>
#define prim 3210121
#define maxl 510
long i,j,k,n,m,t,sum;
long c[maxl][maxl][maxl];
char s1[maxl],s2[maxl];
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
scanf("%s",s1+1);s1[0]=' ';
n=strlen(s1)-1;
scanf("%s",s2+1);s2[0]=' ';
m=strlen(s2)-1;
c[0][0][0]=1;t=(m+n)/2;
for (i=0; i<=t; i++)
for (j=0; j<=n; j++)
for (k=0; k<=m; k++)
if (c[i][j][k]!=0)
{
if (s1[j+1]==s2[m-k]) c[i+1][j+1][k+1]=(c[i+1][j+1][k+1]+c[i][j][k])%prim;
if (j+1!=n-(i-k))
if (s1[j+1]==s1[n-(i-k)]) c[i+1][j+1][k]=(c[i+1][j+1][k]+c[i][j][k])%prim;
if (s2[i-j+1]==s1[n-(i-k)]) c[i+1][j][k]=(c[i+1][j][k]+c[i][j][k])%prim;
if (i-j+1!=m-k)
if (s2[i-j+1]==s2[m-k]) c[i+1][j][k+1]=(c[i+1][j][k+1]+c[i][j][k])%prim;
}
for (i=0; i<=n; i++)
for (j=0; j<=m; j++)
sum=(sum+c[t][i][j])%prim;
printf("%ld\n",sum);
return 0;
}