Pagini recente » Cod sursa (job #3162898) | Cod sursa (job #1690742) | Cod sursa (job #2739417) | Cod sursa (job #779954) | Cod sursa (job #2254019)
#include <fstream>
#include <cstring>
#define DIM 502
#define MOD 3210121
using namespace std;
ifstream fin ("iv.in");
ofstream fout ("iv.out");
int n,m,p1,p2,q1,q2,t,sol,i;
char a[DIM],b[DIM];
int d[2][DIM][DIM];
int main (){
fin>>a+1>>b+1;
n = strlen (a+1);
m = strlen (b+1);
/// q2 = p1 + p2 + q1 - n - m - 2
t = 1;
d[0][0][n+1] = 1;
for (p1=0;p1<=n;p1++){
for (p2=0;p2<=m;p2++)
for (q1=n+1;q1>=p1;q1--){
q2 = n + m + 2 - p1 - p2 - q1;
if (p1+1 < q1-1 && a[p1+1] == a[q1-1]){
d[t][p2][q1-1] = (d[t][p2][q1-1] + d[1-t][p2][q1]) % MOD;
}
if (p1 < q1-1 && p2+1 < q2 && a[q1-1] == b[p2+1]){
d[1-t][p2+1][q1-1] = (d[1-t][p2+1][q1-1] + d[1-t][p2][q1] ) % MOD;
}
if (p1+1 < q1 && p2 < q2-1 && a[p1+1] == b[q2-1]){
d[t][p2][q1] = (d[t][p2][q1] + d[1-t][p2][q1]) %MOD;
}
if (p2+1 < q2-1 && b[p2+1] == b[q2-1]){
d[1-t][p2+1][q1] = (d[1-t][p2+1][q1] + d[1-t][p2][q1]) % MOD;
}
if ( (q1-p1==1 && q2-p2==1) || (q1-p1==1 && q2-p2==2) || (q1-p1==2 && q2-p2==1) )
sol = (sol + d[1-t][p2][q1]) % MOD;
}
memset (d[1-t],0,sizeof(d[1-t]));
t = 1 - t;
}
/*t = 1 - t;
if ((n+m) % 2){
for (i=0;i<=n;i++)
sol = (sol + d[t][i][n-i]) % MOD;
}
else{
for (i=0;i<n;i++)
sol = (sol + d[t][i][n-i] + d[t][i][n-i-1]) % MOD;
}*/
fout<<sol;
return 0;
}