Pagini recente » Cod sursa (job #466680) | Cod sursa (job #1997502) | Cod sursa (job #2430366) | Cod sursa (job #3260808) | Cod sursa (job #2205512)
#include<fstream>
#include<string.h>
#define MOD 3210121
using namespace std;
ifstream fi("iv.in");
ofstream fo("iv.out");
int n,m,i,j,k,ind,Dp[2][505][505],cr,rez,l;
char A[505],B[505];
int main()
{
fi>>(A+1);
n=strlen(A+1);
fi>>(B+1);
m=strlen(B+1);
Dp[0][0][0]=1;
for(i=0; i<=n; i++)
{
cr=i%2;
for(j=0; j<=m; j++)
{
for(k=0; k<=n-i; k++)
{
if(Dp[cr][j][k]==0)
continue;
ind=i+j-k;
if(ind<0 && ind<=m-j)
continue;
if(A[i+1]==A[n-k] && i+k+2<=n)
Dp[1-cr][j][k+1]=(Dp[1-cr][j][k+1]+Dp[cr][j][k])%MOD;
if(A[i+1]==B[m-ind] && i+k+1<=n && j+ind+1<=m)
Dp[1-cr][j][k]=(Dp[1-cr][j][k]+Dp[cr][j][k])%MOD;
if(B[j+1]==A[n-k] && i+k+1<=n && j+ind+1<=m)
Dp[cr][j+1][k+1]=(Dp[cr][j+1][k+1]+Dp[cr][j][k])%MOD;
if(B[j+1]==B[m-ind] && j+ind+2<=m)
Dp[cr][j+1][k]=(Dp[cr][j+1][k]+Dp[cr][j][k])%MOD;
l=i+j+k+ind;
if(l==n+m || l==n+m-1)
rez=(rez+Dp[cr][j][k])%MOD;
Dp[cr][j][k]=0;
}
}
}
fo<<rez<<"\n";
fi.close();
fo.close();
return 0;
}