Pagini recente » Cod sursa (job #348640) | Cod sursa (job #2018137) | Cod sursa (job #2479987) | Istoria paginii runda/rosedu_cdl_2015 | Cod sursa (job #251043)
Cod sursa(job #251043)
#include <cstdio>
#include <cstring>
#define mod 3210121
using namespace std;
int i, j, k, l, n, m, sol;
char s1[510], s2[510];
int a[50][50][50][50];
int main() {
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
scanf("%s", s1);
scanf("%s", s2);
n = strlen(s1); m = strlen(s2);
for (i = n; i > 0; i--)
s1[i] = s1[i - 1];
for (i = m; i > 0; i--)
s2[i] = s2[i - 1];
a[0][n + 1][0][m + 1] = a[0][n + 1][0][m] = a[0][n + 1][1][m + 1] = a[0][n][0][m + 1] = a[1][n + 1][0][m + 1] = 1;
for (i = 0; i <= n; i++) {
// memset(a[(i + 1) % 2], 0, sizeof(a[i % 2]));
for (j = n + 1; j >= 1; j--)
for (k = 0; k <= m; k++)
for (l = m + 1; l >= 1; l--) {
if (s1[i + 1] == s1[j - 1])
a[(i + 1)][j - 1][k][l] = (a[(i + 1)][j - 1][k][l] + a[i][j][k][l]) % mod;
if (s1[i + 1] == s2[l - 1])
a[(i + 1)][j][k][l - 1] = (a[(i + 1)][j][k][l - 1] + a[i][j][k][l]) % mod;
if (s2[k + 1] == s1[j - 1])
a[i][j - 1][k + 1][l] = (a[i][j - 1][k + 1][l] + a[i][j][k][l]) % mod;
if (s2[k + 1] == s2[l - 1])
a[i][j][k + 1][l - 1] = (a[i][j][k + 1][l - 1] + a[i][j][k][l]) % mod;
}
}
for (i = 0; i <= n; i++)
for (j = 0; j <= m; j++)
sol = (sol + a[i][i + 1][j][j + 1]) % mod;
printf("%d\n", sol);
return 0;
}