Pagini recente » Cod sursa (job #530491) | Cod sursa (job #2539108) | Cod sursa (job #2656303) | Cod sursa (job #265142) | Cod sursa (job #383096)
Cod sursa(job #383096)
#include<stdio.h>
#include<cstring>
#define NMAX 505
#define mod 3210121
using namespace std;
int a, b, mij, rez, i, j, t1, t2, c[2][NMAX][NMAX];
char S1[NMAX], S2[NMAX];
int main()
{
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
gets(S1+1);
gets(S2+1);
S1[0] = S2[0] = 'z';
a = strlen(S1)-1;
b = strlen(S2)-1;
c[0][0][0] = 1;
mij = (a+b)/2;
t1 = 0;
for(t2 = 0; t2 < mij; t2++)
{
t1 = 1-t1;
memset(c[t1], 0, sizeof(c[t1]));
for(i = 0; i <= a; i++)
for(j = 0; j <= a; j++)
{
if(c[1 - t1][i][j])
{
if(S1[i+1] == S1[a-j] && i+1 < a-j)
{
c[t1][i+1][j+1] = c[1-t1][i][j];
if(c[t1][i+1][j+1] > mod) c[t1][i+1][j+1] -= mod;
}
if(S1[i+1] == S2[b-(t2-j)] && i < a-j && t2-i < b - (t2-j))
{
c[t1][i+1][j] = c[1-t1][i][j];
if(c[t1][i+1][j] > mod) c[t1][i+1][j] -= mod;
}
if(S2[i+1] == S2[b-(t2-j)] && t2 - i+1 < b - (t2-j))
{
c[t1][i][j] = c[1-t1][i][j];
if(c[t1][i][j] > mod) c[t1][i][j] -= mod;
}
if(S2[t2-i+1] == S1[a-j] && i < a-j && t2-i < b -(t2-j))
{
c[t1][i][j+1] = c[1-t1][i][j];
if(c[t1][i+1][j] > mod) c[t1][i+1][j] -= mod;
}
}
}
}
t1 = 1-t1;
rez = 0;
for(i = 0; i <= a; i++)
for(j = 0; j <= a; j++)
{
rez += c[1-t1][i][j];
if(rez > mod) rez -= mod;
}
printf("%d\n", rez);
return 0;
}