Pagini recente » Cod sursa (job #2683233) | Cod sursa (job #2924709) | Cod sursa (job #1969616) | Cod sursa (job #1021195) | Cod sursa (job #2278120)
#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=ind^1)
for(int p2=0;p2<=b;p2++)
for(int q1=0;q1<=a;q1++)
{
int q2=p1+p2-q1;
if(q2<0||p1+q1>a)break;
if(p1+q1+1<a&&A[p1+1]==A[a-q1])
add(dp[ind^1][p2][q1+1],dp[ind][p2][q1]);
if(p1+q1<a&&p2+q2<b&&A[p1+1]==B[b-q2])
add(dp[ind^1][p2][q1],dp[ind][p2][q1]);
if(p1+q1<a&&p2+q2<b&&A[a-q1]==B[p2+1])
add(dp[ind][p2+1][q1+1],dp[ind][p2][q1]);
if(p2+q1+1<b&&B[p2+1]==B[b-q2])
add(dp[ind][p2+1][q1],dp[ind][p2][q1]);
int len=p1+q1+p2+q2;
if((len==a+b||len==a+b-1)&&p2+q2<=b)
add(rez,dp[ind][p2][q1]);
dp[ind][p2][q1]=0;
}
fo<<rez;
fi.close();
fo.close();
return 0;
}