Pagini recente » Cod sursa (job #1395269) | Cod sursa (job #1639535) | Cod sursa (job #2983860) | Cod sursa (job #979319) | Cod sursa (job #250621)
Cod sursa(job #250621)
#include <cstdio>
#include <cstring>
const int MAX_N = 510;
const int MOD = 3210121;
int n, m, sol;
int d[2][MAX_N][MAX_N];
char a[MAX_N], b[MAX_N];
int main()
{
int i, j, q, p;
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
scanf("%s\n", a + 1);
scanf("%s\n", b + 1);
a[0] = b[0] = ' ';
n = strlen(a);
m = strlen(b);
d[0][0][0] = 1;
for (q = 0, p = 1; q < (n + m) / 2; ++q, p = 1 - p)
{
memset(d[p], 0, sizeof(d[p]));
for (i = 0; i <= n; ++i)
for (j = 0; j <= n; ++j)
if (d[1 - p][i][j])
{
if (a[i + 1] == a[n - j] && i + 1 < n - j) d[p][i + 1][j + 1] = (d[p][i + 1][j + 1] + d[1 - p][i][j]) % MOD;
if (b[q - i + 1] == b[m - (q - j)] && q - i + 1 < m - (q - j)) d[p][i][j] = (d[p][i][j] + d[1 - p][i][j]) % MOD;
if (a[i + 1] == b[m - (q - j)] && i + 1 < n - j + 1 && q - i < m - (q - j)) d[p][i + 1][j] = (d[p][i + 1][j] + d[1 - p][i][j]) % MOD;
if (b[q - i + 1] == a[n - j] && i < n - j && q - i + 1 < m - (q - j) + 1) d[p][i][j + 1] = (d[p][i][j + 1] + d[1 - p][i][j]) % MOD;
}
}
for (i = 0; i <= n; ++i)
for (j = 0; j <= n; ++j) sol = (sol + d[1 - p][i][j]) % MOD;
printf("%d\n", sol);
}