Pagini recente » Cod sursa (job #1084846) | Cod sursa (job #179624) | Cod sursa (job #234037) | Cod sursa (job #1373448) | Cod sursa (job #2277239)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fi("iv.in");
ofstream fo("iv.out");
const int NMAX=505,MOD=3210121;
string a,b;
int n,m,dp[NMAX][NMAX][NMAX],sol,r;
int main()
{
fi>>a>>b;
n=a.size();
m=b.size();
a="#"+a; b="#"+b;
dp[0][0][0]=1;
for(int sa=0;sa<=n;sa++)
{
r=sa%2;
for(int sb=0;sb<=m;sb++)
for(int fa=0;fa<=n-sa;fa++)
{
int fb=sa+sb-fa;
if(fb<0)
continue;
if(sa+1<=n-fa-1 && a[sa+1]==a[n-fa])
dp[1-r][sb][fa+1]=(dp[1-r][sb][fa+1]+dp[r][sb][fa])%MOD;
if(sa+1<=n-fa && sb<=m-fb-1 && a[sa+1]==b[m-fb])
dp[1-r][sb][fa]=(dp[1-r][sb][fa]+dp[r][sb][fa])%MOD;
if(sb+1<=m-fb && sa<=n-fa-1 && b[sb+1]==a[n-fa])
dp[r][sb+1][fa+1]=(dp[r][sb+1][fa+1]+dp[r][sb][fa])%MOD;
if(sb+1<=m-fb-1 && b[sb+1]==b[m-fb])
dp[r][sb+1][fa]=(dp[r][sb+1][fa]+dp[r][sb][fa])%MOD;
int lga=sa+fa;
int lgb=sb+fb;
if((lga==n && lgb==m) || (lga==n-1 && lgb==m) || (lga==n && lgb==m-1))
sol=(sol+dp[r][sb][fa])%MOD;
dp[r][sb][fa]=0;
}
}
fo<<sol<<"\n";
fi.close();
fo.close();
return 0;
}