Pagini recente » Cod sursa (job #573124) | Cod sursa (job #682632) | Cod sursa (job #1298336) | Cod sursa (job #114618) | Cod sursa (job #1256171)
#include<fstream>
#include<cstring>
using namespace std;
#define MOD 3210121
ifstream fin("iv.in");
ofstream fout("iv.out");
char a[512],b[512],aux[512];
int n,m,p,sol,D[512][512],E[512][512];
int main()
{
int i,j,k;
fin>>(a+1)>>(b+1);
n=strlen(a+1), m=strlen(b+1);
if (n>m)
{
strcpy(aux,a+1);
strcpy(a+1,b+1);
strcpy(b+1,aux);
p=n, n=m, m=p;
}
E[0][0]=1, p=(m+n)>>1;
for (k=1;k<=p;++k)
{
for (i=0;i<=n;++i)
for (j=0;j<=n;++j)
{
D[i][j]=0;
if (a[i]==a[n-j+1] && i>0 && j>0)
D[i][j]+=E[i-1][j-1];
if (a[i]==b[m-k+j+1] && i>0)
D[i][j]+=E[i-1][j];
if (b[k-i]==a[n-j+1] && j>0)
D[i][j]+=E[i][j-1];
if (b[k-i]==b[m-k+j+1])
D[i][j]+=E[i][j];
while (D[i][j]>MOD)
D[i][j]-=MOD;
}
memcpy(E,D,sizeof(D));
}
for (i=0;i<=n && i<=p;++i)
for (j=0;j<=n && i<=p;++j)
if (i+j<=n && 2*p<=m+i+j)
{
sol+=D[i][j];
while (sol>MOD)
sol-=MOD;
}
fout<<sol<<"\n";
return 0;
}