Pagini recente » Cod sursa (job #119980) | Cod sursa (job #2573013) | Cod sursa (job #92739) | Cod sursa (job #2282773) | Cod sursa (job #3170605)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
const int DIM = 510;
const int MOD = 3210121;
char s1[DIM], s2[DIM], S1[DIM], S2[DIM];
int dp[2][DIM][DIM];
int main() {
fin >> S1 >> S2;
strcpy(s1 + 1, S1);
strcpy(s2 + 1, S2);
int len1 = strlen(s1 + 1);
int len2 = strlen(s2 + 1);
int sol = 0, line = 0;
dp[0][0][0] = 1;
for (int i = 0; i <= len1; i++) {
for (int j = 0; i + j <= len1; j++) {
for (int k = 0; k <= len2; k++) {
int l = i + k - j;
if (l < 0 || l + k > len2) continue;
if (i + j + k + l == len1 + len2 || i + j + k + l == len1 + len2 - 1) {
sol += dp[line][j][k];
sol %= MOD;
}
if (s1[i + 1] == s1[len1 - j]) {
dp[1 - line][j + 1][k] += dp[line][j][k];
dp[1 - line][j + 1][k] %= MOD;
}
if (l < len2 && s1[i + 1] == s2[len2 - l]) {
dp[1 - line][j][k] += dp[line][j][k];
dp[1 - line][j][k] %= MOD;
}
if (s2[k + 1] == s1[len1 - j]) {
dp[line][j + 1][k + 1] += dp[line][j][k];
dp[line][j + 1][k + 1] %= MOD;
}
if (l < len2 && s2[k + 1] == s2[len2 - l]) {
dp[line][j][k + 1] += dp[line][j][k];
dp[line][j][k + 1] %= MOD;
}
dp[line][j][k] = 0;
}
}
line = 1 - line;
}
fout << sol;
return 0;
}