Pagini recente » Cod sursa (job #1270332) | Cod sursa (job #3036671) | Cod sursa (job #715441) | Cod sursa (job #2032882) | Cod sursa (job #3171347)
#include <fstream>
#include <cstring>
#define DIM 510
#define MOD 3210121
using namespace std;
int n, m, lg, sol, l;
char s1[DIM], s2[DIM];
int D[2][DIM][DIM];
int main() {
ifstream fin("iv.in");
ofstream fout("iv.out");
fin >> s1 + 1 >> s2 + 1;
n = strlen(s1 + 1);
m = strlen(s2 + 1);
sol = 0, l = 0;
D[0][0][0] = 1;
for (int i = 0; i <= n; i++) {
for (int j = 0; i + j <= n; j++) {
for (int k = 0; k <= m; k++) {
lg = i + k - j;
if (lg < 0 || lg + k > m) {
continue;
}
if (i + j + k + lg == n + m || i + j + k + lg == n + m - 1) {
sol += D[l][j][k];
sol %= MOD;
}
if (s1[i + 1] == s1[n - j]) {
D[1 - l][j + 1][k] += D[l][j][k];
D[1 - l][j + 1][k] %= MOD;
}
if (lg < m && s1[i + 1] == s2[m - lg]) {
D[1 - l][j][k] += D[l][j][k];
D[1 - l][j][k] %= MOD;
}
if (s2[k + 1] == s1[n - j]) {
D[l][j + 1][k + 1] += D[l][j][k];
D[l][j + 1][k + 1] %= MOD;
}
if (lg < m && s2[k + 1] == s2[m - lg]) {
D[l][j][k + 1] += D[l][j][k];
D[l][j][k + 1] %= MOD;
}
D[l][j][k] = 0;
}
}
l = 1 - l;
}
fout << sol;
return 0;
}