Pagini recente » Cod sursa (job #3254947) | Cod sursa (job #3124978) | Cod sursa (job #304193) | Cod sursa (job #2981293) | Cod sursa (job #981681)
Cod sursa(job #981681)
#include <stdio.h>
#include <string.h>
#define maxn 510
#define mod 3210121
char a[maxn],b[maxn];
int n,m,sol;
int c[maxn][maxn],d[maxn][maxn];
void move(char a[],int n)
{
int i;
for (i=n;i>0;i--) a[i]=a[i-1];
a[0]=' ';
}
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
fgets(a,maxn,stdin);
fgets(b,maxn,stdin);
n=strlen(a)-1;
move(a,n);
m=strlen(b)-1;
move(b,m);
int i,j,k,x,y,z,t;
c[0][0]=1;
for (i=0;i<(n+m)/2;i++)
{
for (j=0;j<=i && j<=n;j++)
for (k=0;k<=i && k<=n;k++)
{
d[j][k]=c[j][k];
c[j][k]=0;
}
for (j=0;j<=i && j<=n;j++)
for (k=0;k<=i && k<=n;k++)
if (d[j][k]!=0)
{
x=j+1;
y=n-k;
z=i-j+1;
t=m+k-i;
if ((x<y) && (a[x]==a[y]))
{
c[j+1][k+1]+=d[j][k];
if (c[j+1][k+1]>mod) c[j+1][k+1]-=mod;
}
if ((x<=y) && (z<=t) && (a[x]==b[t]))
{
c[j+1][k]+=d[j][k];
if (c[j+1][k]>mod) c[j+1][k]-=mod;
}
if ((x<=y) && (z<=t) && (b[z]==a[y]))
{
c[j][k+1]+=d[j][k];
if (c[j][k+1]>mod) c[j][k+1]-=mod;
}
if ((z<t) && (b[z]==b[t]))
{
c[j][k]+=d[j][k];
if (c[j][k]>mod) c[j][k]-=mod;
}
}
}
for (i=0;i<=n;i++)
for (j=0;j<=n;j++)
{
sol+=c[i][j];
if (sol>mod) sol-=mod;
}
printf("%d\n",sol);
return 0;
}