Pagini recente » Cod sursa (job #1936208) | Cod sursa (job #585029) | Cod sursa (job #2904213) | Cod sursa (job #630929) | Cod sursa (job #2278984)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("iv.in");
ofstream fo("iv.out");
const int NMAX = 505;
const int MOD = 3210121;
char A[NMAX], B[NMAX];
int n, m;
int dp[2][NMAX][NMAX];
void add(int &a, int b)
{
a += b;
if (a >= MOD)
a -= MOD;
}
int main()
{
fi >> A + 1 >> B + 1;
n = strlen(A + 1), m = strlen(B + 1);
dp[0][0][0] = 1;
int r = 0;
int rez = 0;
for (int p1 = 0; p1 <= n; p1++)
{
for (int p2 = 0; p2 <= m; p2++)
{
for (int q1 = 0; q1 + p1 <= n; q1++)
{
int q2 = p1 + p2 - q1;
if (q2 < 0)
continue;
if (p1 + q1 + 2 <= n && A[p1 + 1] == A[n - q1])
add(dp[1 - r][p2][q1 + 1], dp[r][p2][q1]);
if (p2 + q2 + 2 <= m && B[p2 + 1] == B[m - q2])
add(dp[r][p2 + 1][q1], dp[r][p2][q1]);
if (p1 + q1 + 1 <= n && p2 + q2 + 1 <= m && A[p1 + 1] == B[m - q2])
add(dp[1 - r][p2][q1], dp[r][p2][q1]);
if (p1 + q1 + 1 <= n && p2 + q2 + 1 <= m && B[p2 + 1] == A[n - q1])
add(dp[r][p2 + 1][q1 + 1], dp[r][p2][q1]);
if ((p1 + q1 == n || p2 + q2 == m) && p1 + q1 + p2 + q2 >= n + m - 1)
add(rez, dp[r][p2][q1]);
dp[r][p2][q1] = 0;
}
}
r = 1 - r;
}
fo << rez;
return 0;
}