Pagini recente » Cod sursa (job #2744625) | Cod sursa (job #2572988) | Cod sursa (job #2342561) | Cod sursa (job #1533782) | Cod sursa (job #48767)
Cod sursa(job #48767)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define Lmax 524
#define modulo 3210121
char c1[Lmax],c2[Lmax];
long a[2][Lmax][Lmax],sum;
short int l1,l2,p1,p2,p3,p4,i,k;
int main()
{
freopen("iv.in","r",stdin);
scanf("%s",c1);
scanf("%s",c2);
l1=strlen(c1);
l2=strlen(c2);
for (i=l1;i>0;--i)
c1[i]=c1[i-1];
for (i=l2;i>0;--i)
c2[i]=c2[i-1];
/*if (c1[0]==c1[l1]) ++a[1][0][l1];
if (c1[0]==c2[l2]) ++a[1][0][l1+1];
if (c2[0]==c1[l1]) ++a[0][1][l1];
if (c2[0]==c2[l2]) ++a[0][1][l1+1];*/
a[0][0][l1+1]=1;
k=0;
for (p1=0;p1<=l1;++p1)
{
for (p2=0;p2<=l2;++p2)
for (p3=l1+1;p3>p1;--p3)
{
//l1+l2+2-p3-p4+2=p1+p2;
p4=l1+l2+2-p1-p2-p3;
if (p4<p2) continue;
if (p4>l2+1) break;
//
if ((p1>0)&&(p3<=l1)&&(c1[p1]==c1[p3])&&(p2!=p4)) a[k][p2][p3]+=a[1-k][p2][p3+1];
if ((p1>0)&&(p4<=l2)&&(c1[p1]==c2[p4])) a[k][p2][p3]+=a[1-k][p2][p3];
if ((p2>0)&&(p3<=l1)&&(c2[p2]==c1[p3])) a[k][p2][p3]+=a[k][p2-1][p3+1];
if ((p2>0)&&(p4<=l2)&&(c2[p2]==c2[p4])&&(p1!=p3)) a[k][p2][p3]+=a[k][p2-1][p3];
a[k][p2][p3]%=modulo;
if ((p3-p1<=1)&&(p4-p2<=1))
{
sum+=a[k][p2][p3];
sum%=modulo;
}
}
k=1-k;
memset(a[k],0,sizeof(a[k]));
}
freopen("iv.out","w",stdout);
printf("%ld",sum);
fclose(stdout);
return 0;
}