Pagini recente » Cod sursa (job #1393043) | Pitici2 | Cod sursa (job #422556) | Cod sursa (job #1993746) | Cod sursa (job #184444)
Cod sursa(job #184444)
#include <stdio.h>
#include <string.h>
#define prim 3210121
#define maxl 510
long i,j,k,n,m,t,sum,l;
long c[2][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;
l=0;
for (i=0; i<=t-1; i++)
{
l=1-l;
for (j=0; j<=n; j++)
for (k=0; k<=n; k++)
if (c[1-l][j][k]!=0)
{
if (s1[j+1]==s1[n-k] && j+1<n-k)
c[l][j+1][k+1]=(c[l][j+1][k+1]+c[1-l][j][k])%prim;
if (s2[i-j+1]==s2[m-(i-k)] && i-j+1<m-(i-k))
c[l][j][k]=(c[l][j][k]+c[1-l][j][k])%prim;
if (s1[j+1]==s2[m-(i-k)] && j+1<n-k+1 && i-j<m-(i-k))
c[l][j+1][k]=(c[l][j+1][k]+c[1-l][j][k])%prim;
if (s2[i-j+1]==s1[n-k] && j<n-k && i-j+1<m-(i-k)+1)
c[l][j][k+1]=(c[l][j][k+1]+c[1-l][j][k])%prim;
}
if (i!=t-1)
for (j=0; j<=n; j++)
for (k=0; k<=n; k++)
c[1-l][j][k]=0;
}
for (i=0; i<=n; i++)
for (j=0; j<=n; j++)
sum=(sum+c[l][i][j])%prim;
printf("%ld\n",sum);
return 0;
}