Pagini recente » Cod sursa (job #260091) | Cod sursa (job #387989) | Cod sursa (job #586987) | Cod sursa (job #402479) | Cod sursa (job #3171489)
#include <fstream>
#include <cstring>
#define mod 3210121
#define dim 502
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
int d[2][dim][dim];
char s[dim], t[dim];
int main()
{
bool ok;
int n, m, sol=0, i, j, k;
fin.getline(s+1, dim);
fin.getline(t+1, dim);
n=strlen(s+1);
m=strlen(t+1);
if(s[1]==s[n])
{
d[1][1][1]=1;
}
if(s[1]==t[m])
{
d[1][1][0]=1;
}
if(t[1]==t[m])
{
d[1][0][0]=1;
}
if(t[1]==s[n])
{
d[1][0][1]=1;
}
ok=1;
for(k=2;k<=(n+m)/2;k++)
{
ok=1-ok;
for(i=0;i<=n&&i<=k;i++)
{
for(j=0;i+j<=n&&j<=k;j++)
{
d[ok][i][j]=0;
if(s[i]==s[n-j+1]&&i>=1&&n-j+1<=n)
{
d[ok][i][j]+=d[1-ok][i-1][j-1];
}
if(s[i]==t[m-k+j+1]&&i>=1&&m-k+j+1<=m)
{
d[ok][i][j]+=d[1-ok][i-1][j];
}
if(t[k-i]==s[n-j+1]&&k-i>=1&&n-j+1<=n)
{
d[ok][i][j]+=d[1-ok][i][j-1];
}
if(t[k-i]==t[m-k+j+1]&&k-i>=1&&m-k+j+1<=m)
{
d[ok][i][j]+=d[1-ok][i][j];
}
d[ok][i][j]%=mod;
}
}
}
if((n+m)%2==0)
{
for(int i=0;i<=n;i++)
{
sol+=d[ok][i][n-i];
sol%=mod;
}
}
else
{
for(i=0;i<=n;i++)
{
sol+=d[ok][i][n-i]+d[ok][i][n-i-1];
sol%=mod;
}
}
fout<<sol;
return 0;
}