Pagini recente » Cod sursa (job #699899) | Cod sursa (job #181310) | Cod sursa (job #601786) | Cod sursa (job #2761493) | Cod sursa (job #1508592)
#include <cstdio>
#include <cstring>
#define nmax 505
#define mod 3210121
using namespace std;
int n,m,sol;
int d[2][nmax][nmax];
char a[nmax],b[nmax];
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
gets(a+1);
gets(b+1);
n=strlen(a+1);
m=strlen(b+1);
d[0][0][n+1]=1;
int sum,p1,p2,q1,q2,x;
for (p1=0;p1<=n;p1++) {
for (p2=0;p2<=m;p2++)
for (q1=n+1;q1>=p1;q1--) {
q2=m+n-q1-p1-p2+2;
if (q2<0||q2>m+1||q2<p2)
continue;
d[p1&1][p2][q1]%=mod;
x=d[p1&1][p2][q1];
if (p1+1<q1-1&&a[p1+1]==a[q1-1])
d[(p1+1)&1][p2][q1-1]+=x;
if (p1+1<q1&&p2<q2-1&&a[p1+1]==b[q2 - 1])
d[(p1+1)&1][p2][q1]+=x;
if (p1<q1-1&&p2+1<q2&&a[q1-1]==b[p2 + 1])
d[p1&1][p2+1][q1-1]+=x;
if (p2+1<q2-1&&b[p2+1]==b[q2 - 1])
d[p1&1][p2+1][q1]+=x;
if ((p1+1==q1&&p2+1==q2)||((p1+1==q1-1&&p2+1==q2)||(p2+1==q2-1&&p1+1==q1))) {
sol+=x;
if (sol>mod)
sol-=mod;
}
}
memset(d[p1&1],0,sizeof(d[p1&1]));
}
printf("%d\n",sol);
return 0;
}