Pagini recente » Cod sursa (job #491280) | Cod sursa (job #2268376) | Cod sursa (job #1368526) | Cod sursa (job #2779912) | Cod sursa (job #2278147)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("iv.in");
ofstream fo("iv.out");
const int NMAX = 55;
const int MOD = 3210121;
char A[NMAX], B[NMAX];
int dp[NMAX][NMAX][NMAX][NMAX];
int n, m;
void add(int &a, int b)
{
a = (a + b) % MOD;
}
int main()
{
fi >> A + 1 >> B + 1;
n = strlen(A + 1);
m = strlen(B + 1);
int rez = 0;
dp[0][n + 1][0][m + 1] = 1;
for (int stA = 0; stA <= n; stA++)
{
for (int drA = n + 1; drA > stA; drA--)
{
for (int stB = 0; stB <= m; stB++)
{
for (int drB = m + 1; drB > stB; drB--)
{
if (stA >= 1 && drB <= m)
if (A[stA] == B[drB])
add(dp[stA][drA][stB][drB], dp[stA - 1][drA][stB][drB + 1]);
if (stA >= 1 && drA <= n)
if (A[stA] == A[drA])
add(dp[stA][drA][stB][drB], dp[stA - 1][drA + 1][stB][drB]);
if (stB >= 1 && drA <= n)
if (B[stB] == A[drA])
add(dp[stA][drA][stB][drB], dp[stA][drA + 1][stB - 1][drB]);
if (stB >= 1 && drB <= m)
if (B[stB] == B[drB])
add(dp[stA][drA][stB][drB], dp[stA][drA][stB - 1][drB + 1]);
if (drA == stA + 1 && drB == stB + 1)
add(rez, dp[stA][drA][stB][drB]);
}
}
}
}
cout << rez;
return 0;
}