Pagini recente » Cod sursa (job #2847077) | Cod sursa (job #857280) | Cod sursa (job #1709794) | Cod sursa (job #1678290) | Cod sursa (job #2049823)
#include <iostream>
#include <fstream>
using namespace std;
const int nmax=505;
const int mod=3210121;
string a,b;
int modes[2][nmax][nmax];
int val,n,m,i,j,k,use,len,st,dr,tot;
void prp(int A,int B)
{
modes[1-use][A][B]+=val;
if(modes[1-use][A][B]>=mod)
modes[1-use][A][B]-=mod;
}
int main()
{
ifstream f("iv.in");
ofstream g("iv.out");
f>>a>>b;
n=a.size();m=b.size();
a=" "+a;b=" "+b;len=(n+m)/2;
modes[0][0][0]=1;
for(i=0;i<len;i++)
{
for(j=0;j<=min(n,i);j++)
for(k=0;k<=min(n-j,i);k++)
modes[1-use][j][k]=0;
for(j=0;j<=min(n,i);j++)
for(k=0;k<=min(n-j,i);k++)
if(modes[use][j][k])
{
val=modes[use][j][k];
st=i-j;dr=i-k;
if(st<=m-dr+1)
{
if(a[j+1]==a[n-k])
prp(j+1,k+1);
if(dr<m&&a[j+1]==b[m-dr])
prp(j+1,k);
if(st<m&&b[st+1]==a[n-k])
prp(j,k+1);
if(st<m&&dr<m&&st+dr+2<=m&&b[st+1]==b[m-dr])
prp(j,k);
}
}
use=1-use;
}
for(j=0;j<=min(n,i);j++)
for(k=0;k<=min(n-j,i);k++)
if(modes[use][j][k])
{
tot+=modes[use][j][k];
if(tot>=mod)
tot-=mod;
}
g<<tot;
return 0;
}