Pagini recente » Cod sursa (job #1041957) | Cod sursa (job #150585) | Cod sursa (job #580527) | Cod sursa (job #1973255) | Cod sursa (job #2278143)
#include <fstream>
#include <cstring>
#define DIM 505
#define MOD 3210121
using namespace std;
ifstream fi("iv.in");
ofstream fo("iv.out");
char A[DIM],B[DIM];
int a,b;
int dp[2][DIM][DIM],rez;
inline void add(int &a,int b)
{
a+=b;
if(a>=MOD)a-=MOD;
}
int main()
{
fi>>(A+1)>>(B+1);
a=strlen(A+1),b=strlen(B+1);
dp[0][0][0]=1;
for(int p1=0,ind=0;p1<=a;p1++,ind^=1)
for(int p2=0;p2<=b;p2++)
for(int q1=0;q1<=a-p1;q1++)
{
int q2=p1+p2-q1;
if(q2<0)continue;
if(p1+q1+1<a && A[p1+1]==A[a-q1])
add(dp[ind^1][p2][q1+1],dp[ind][p2][q1]);
if(p2+q2+1<b && B[p2+1]==B[b-q2])
add(dp[ind][p2+1][q1],dp[ind][p2][q1]);
if(p1+q1<a && p2+q2<b)
{
if(A[p1+1]==B[b-q2])
add(dp[ind^1][p2][q1],dp[ind][p2][q1]);
if(B[p2+1]==A[a-q1])
add(dp[ind][p2+1][q1+1],dp[ind][p2][q1]);
}
if((p1+q1==a && p2+q2==b) || (p1+q1==a-1 && p2+q2==b) || (p1+q1==a && p2+q2==b-1))
rez=(rez+dp[ind][p2][q1])%MOD;
dp[ind][p2][q1]=0;
}
fo<<rez;
fi.close();
fo.close();
return 0;
}