Pagini recente » Cod sursa (job #1977698) | Cod sursa (job #2852049) | Cod sursa (job #2201921) | Cod sursa (job #1338099) | Cod sursa (job #1480707)
#include <cstdio>
#include <cstring>
using namespace std;
const int Nmax = 500;
const int Mod = 3210121;
char A[Nmax+2], B[Nmax+2];
int d[2][Nmax+2][Nmax+2];
int main()
{
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
gets(A+1);
gets(B+1);
int n = strlen(A+1);
int m = strlen(B+1);
int Sol = 0;
d[0][n+1][0] = 1;
int p = 0;
bool nd = n&1;
bool md = m&1;
for (int i = 0; i <= n; ++i, p ^= 1)
{
for (int j = n+1; j >= i; --j)
for (int k = 0; k <= m; ++k)
{
int h = n + m + 2 - i - j - k;
if(h < 0 || h > m+1) continue;
if (A[i+1] == A[j-1] && j - 1 >= i + 1)
d[p^1][j-1][k] += d[p][j][k];
if (A[i+1] == B[h-1] && j >= i + 1 && h - 1 >= k)
d[p^1][j][k] += d[p][j][k];
if (B[k+1] == A[j-1] && h >= k + 1 && j - 1 >= i)
d[p][j-1][k+1] += d[p][j][k];
if (B[k+1] == B[h-1] && h - 1 >= k + 1)
d[p][j][k+1] += d[p][j][k];
if (d[p^1][j-1][k] >= Mod)
d[p^1][j-1][k] -= Mod;
if (d[p^1][j][k] >= Mod)
d[p^1][j][k] -= Mod;
if (d[p][j-1][k+1] >= Mod)
d[p][j-1][k+1] -= Mod;
if (d[p][j][k+1] >= Mod)
d[p][j][k+1] -= Mod;
if (((j == i + 1 && !nd) || (j == i && nd)) && ((k == h - 1 && !md) || (k == h && md)))
Sol += d[p][j][k];
if (Sol >= Mod) Sol -= Mod;
}
for (int j = n + 1; j >= 0; --j)
for (int k = 0; k <= n+1; ++k)
d[p][j][k] = 0;
}
printf("%d\n",Sol);
}