Pagini recente » Cod sursa (job #1949238) | Cod sursa (job #425615) | Cod sursa (job #943302) | Cod sursa (job #3039484) | Cod sursa (job #3171333)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
const int NMAX = 507;
const int MOD = 3210121;
int dp[2][NMAX][NMAX];
int main()
{
string s1, s2;
int n, m;
fin >> s1 >> s2;
s1 = " " + s1;
s2 = " " + s2;
n = s1.size() - 1;
m = s2.size() - 1;
if (s1[1] == s1[n])
dp[1][1][1] = 1;
if (s1[1] == s2[m])
dp[1][1][0] = 1;
if (s2[1] == s2[m])
dp[1][0][0] = 1;
if (s2[1] == s1[n])
dp[1][0][1] = 1;
int aux = 1;
for (int k = 2; k <= (n + m) / 2; k++)
{
aux = 1 - aux;
for (int i = 0; i <= n && i <= k; i++)
for (int j = 0; i + j <= n && j <= k; j++)
{
dp[aux][i][j] = 0;
if (s1[i] == s1[n - j + 1] && i >= 1 && n - j + 1 <= n)
{
dp[aux][i][j] += dp[1 - aux][i - 1][j - 1];
}
if (s1[i] == s2[m - k + j + 1] && i >= 1 && m - k + j + 1 <= m)
{
dp[aux][i][j] += dp[1 - aux][i - 1][j];
}
if (s2[k - i] == s1[n - j + 1] && k - i >= 1 && n - j + 1 <= n)
{
dp[aux][i][j] += dp[1 - aux][i][j - 1];
}
if (s2[k - i] == s2[m - k + j + 1] && k - i >= 1 && m - k + j + 1 <= m)
{
dp[aux][i][j] += dp[1 - aux][i][j];
}
dp[aux][i][j] %= MOD;
}
}
int ans = 0;
if ((n + m) % 2 == 0)
{
for (int i = 0; i <= n; i++)
{
ans += dp[aux][i][n - i];
ans %= MOD;
}
}
else
{
for (int i = 0; i <= n; i++)
{
ans += dp[aux][i][n - i] + dp[aux][i][n - i - 1];
ans %= MOD;
}
}
fout << ans;
return 0;
}