Pagini recente » Cod sursa (job #1326228) | Cod sursa (job #2765032) | Cod sursa (job #836251) | Cod sursa (job #3203824) | Cod sursa (job #2939833)
#include <fstream>
#include <string>
using namespace std;
ifstream in ("iv.in");
ofstream out ("iv.out");
const int max_size = 501, mod = 3210121;
long long dp[2][max_size][max_size];
int main ()
{
dp[0][0][0] = 1;
long long ans = 0;
string a, b;
in >> a >> b;
int n = a.size(), m = b.size();
a = ' ' + a;
b = ' ' + b;
for (int i = 0; i <= n; i++)
{
for (int j = 0; i + j <= n; j++) /// i si j indicii pt primu sir
{
for (int k = 0; k <= m; k++) /// k indicele pt al doilea sir, de unde iese si ultimu indice
{
int p = i + k - j;
if (p < 0 || k + p > m)
continue;
int aux = i % 2, curr = dp[aux][j][k];
dp[aux][j][k] = 0;
if (i + j + k + p == n + m || i + j + k + p == n + m - 1) /// am epuizat toate car
{
ans = (ans + curr) % mod;
}
else
{
if (a[i + 1] == a[n - j])
{
dp[1 - aux][j + 1][k] = (dp[1 - aux][j + 1][k] + curr) % mod;
}
if (p < m && a[i + 1] == b[m - p])
{
dp[1 - aux][j][k] = (dp[1 - aux][j][k] + curr) % mod;
}
if (p < m && b[k + 1] == b[m - p])
{
dp[aux][j][k + 1] = (dp[aux][j][k + 1] + curr) % mod;
}
if (b[k + 1] == a[n - j])
{
dp[aux][j + 1][k + 1] = (dp[aux][j + 1][k + 1] + curr) % mod;
}
}
}
}
}
out << ans;
in.close();
out.close();
return 0;
}