Pagini recente » Cod sursa (job #758651) | Cod sursa (job #2672281) | Cod sursa (job #132081) | Cod sursa (job #1567727) | Cod sursa (job #2273333)
#include <fstream>
#include <cstring>
#define MOD 3210121
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
int n,m,p1,p2,q1,q2,d[2][510][510],sol;
char a[510],b[510];
int main()
{
fin >> a+1;
fin >> b+1;
n = strlen(a+1);
m = strlen(b+1);
d[0][0][n+1] = 1;
int lin = 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[lin][p2][q1-1] = (d[lin][p2][q1-1]+d[1-lin][p2][q1])%MOD;
if (p1 < q1-1 && p2 < q2-1 && a[p1+1] == b[q2-1])
d[lin][p2][q1] = (d[lin][p2][q1]+d[1-lin][p2][q1])%MOD;
if (p2 < q2-1 && p1 < q1-1 && b[p2+1] == a[q1-1])
d[1-lin][p2+1][q1-1] = (d[1-lin][p2+1][q1-1]+d[1-lin][p2][q1])%MOD;
if (p2+1 < q2-1 && b[p2+1] == b[q2-1])
d[1-lin][p2+1][q1] = (d[1-lin][p2+1][q1]+d[1-lin][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-lin][p2][q1])%MOD;
}
for (int ind1=0; ind1<=505; ind1++)
for (int ind2=0; ind2<=505; ind2++)
d[1-lin][ind1][ind2] = 0;
lin = 1-lin;
}
fout << sol;
return 0;
}