Pagini recente » Cod sursa (job #1497000) | Cod sursa (job #2580714) | Cod sursa (job #2242180) | Cod sursa (job #486509) | Cod sursa (job #1775327)
#include<fstream>
#include<cstring>
#define mod 3210121
using namespace std;
int n, m, i, ii, j, jj, x, k, sol;
int d[2][505][505];
char a[505], b[505];
ifstream fin("iv.in");
ofstream fout("iv.out");
int modul(int x){
if(x >= mod){
x -= mod;
}
return x;
}
int main(){
fin>> a + 1;
n = strlen(a + 1);
fin>> b + 1;
m = strlen(b + 1);
x = (n + m) / 2;
d[0][0][n + 1] = 1;
for(i = 0; i <= min(n, x); i++){
for(j = 0; j <= min(m, x - i); j++){
for(ii = n + 1; ii > i; ii--){
jj = m - (i + j - (n - ii + 1)) + 1;
if(a[i + 1] == a[ii - 1] && i + 1 < ii - 1){
d[1 - k][j][ii - 1] = modul(d[1 - k][j][ii - 1] + d[k][j][ii]);
}
if(a[i + 1] == b[jj - 1] && i + 1 < ii && jj - 1 > j){
d[1 - k][j][ii] = modul(d[1 - k][j][ii] + d[k][j][ii]);
}
if(b[j + 1] == b[jj - 1] && j + 1 < jj - 1){
d[k][j + 1][ii] = modul(d[k][j + 1][ii] + d[k][j][ii]);
}
if(b[j + 1] == a[ii - 1] && j + 1 < jj && ii - 1 > i){
d[k][j + 1][ii - 1] = modul(d[k][j + 1][ii - 1] + d[k][j][ii]);
}
if(i + j == x){
sol = modul(sol + d[k][j][ii]);
}
d[k][j][ii] = 0;
}
}
k = 1 - k;
}
fout<< sol <<"\n";
return 0;
}