Pagini recente » Cod sursa (job #1578775) | Cod sursa (job #2222267) | Cod sursa (job #1496335) | Cod sursa (job #2291162) | Cod sursa (job #344162)
Cod sursa(job #344162)
#include <cstdio>
#include <cstring>
#define maxn 510
#define mod 3210121
using namespace std;
int n, m, i, j, k, l, sol;
char s1[maxn], s2[maxn];
int d[2][maxn][maxn];
int main() {
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
scanf(" %s ", s1 + 1);
scanf(" %s ", s2 + 1);
for (n = 1; s1[n] != 0; n++); n--;
for (m = 1; s2[m] != 0; m++); m--;
d[0][0][0] = 1;
for (i = 0; i < (n + m) / 2; i++) {
for (j = 0; j <= n; j++) {
for (k = 0; k <= n - j - 1; k++) {
if (s1[j + 1] == s1[n - k])
d[1][j + 1][k + 1] = (d[1][j + 1][k + 1] + d[0][j][k]) % mod;
if (s1[j + 1] == s2[m - (i - k)] && j < n - k && i - j < m - (i - k))
d[1][j + 1][k] = (d[1][j + 1][k] + d[0][j][k]) % mod;
if (s2[i - j + 1] == s1[n - k] && j < n - k && i - j < m - (i - k))
d[1][j][k + 1] = (d[1][j][k + 1] + d[0][j][k]) % mod;
if (s2[i - j + 1] == s2[m - (i - k)] && i - j + 1< m - (i - k))
d[1][j][k] = (d[1][j][k] + d[0][j][k]) % mod;
}
}
memcpy(d[0], d[1], sizeof(d[1]));
memset(d[1], 0, sizeof(d[1]));
}
for (i = 0; i <= n; i++)
for (j = 0; j <= n; j++)
sol = (sol + d[0][i][j]) % mod;
printf("%d\n", sol);
}