Pagini recente » Cod sursa (job #1864367) | Cod sursa (job #2050344) | Cod sursa (job #2801504) | Cod sursa (job #1083428) | Cod sursa (job #48765)
Cod sursa(job #48765)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define Lmax 524
#define modulo 3210121
char c1[Lmax],c2[Lmax];
long a[Lmax][Lmax][Lmax],sum;
short int l1,l2,p1,p2,p3,p4,i;
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;
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[p1][p2][p3]+=a[p1-1][p2][p3+1];
if ((p1>0)&&(p4<=l2)&&(c1[p1]==c2[p4])) a[p1][p2][p3]+=a[p1-1][p2][p3];
if ((p2>0)&&(p3<=l1)&&(c2[p2]==c1[p3])) a[p1][p2][p3]+=a[p1][p2-1][p3+1];
if ((p2>0)&&(p4<=l2)&&(c2[p2]==c2[p4])&&(p1!=p3)) a[p1][p2][p3]+=a[p1][p2-1][p3];
a[p1][p2][p3]%=modulo;
if ((p3-p1<=1)&&(p4-p2<=1))
{
sum+=a[p1][p2][p3];
sum%=modulo;
}
}
freopen("iv.out","w",stdout);
printf("%ld",sum);
fclose(stdout);
return 0;
}