Pagini recente » Cod sursa (job #2481714) | Cod sursa (job #1153764) | Istoria paginii runda/autumn19 | Profil Dobricean_Ioan | Cod sursa (job #383606)
Cod sursa(job #383606)
#include <stdio.h>
#include <string>
#define NMAX 505
#define MOD 3210121
int a, b, rez;
int c[2][NMAX][NMAX];
char S1[NMAX], S2[NMAX];
int main()
{ int i, j, t1, t2, mij;
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
//gets(S1+1);
//gets(S2+1);
scanf("%s\n", S1 + 1);
scanf("%s\n", S2 + 1);
S1[0] = S2[0] = ' ';
a = strlen(S1) - 1;
b = strlen(S2) - 1;
c[0][0][0] = 1;
for (t1 = 1, t2 = 0; t2 < (a+b)/2; 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] == S2[a - j] && i + 1 < a - j)
c[t1][i + 1][j + 1] = (c[t1][i + 1][j + 1] + c[1 - t1][i][j]) % MOD;
//if(c[t1][i+1][j+1] > MOD) c[t1][i+1][j+1] -= MOD;
if (S2[t2 - i + 1] == S2[b - (t2 - j)] && t2 - i + 1 < b - (t2 - j))
c[t1][i][j] = (c[t1][i][j] + c[1 - t1][i][j]) % MOD;
//if(c[t1][i][j] > MOD) c[t1][i][j] -= MOD;
if (S1[i + 1] == S2[b - (t2 - j)] && i + 1 < a - j + 1 && t2 - i < b - (t2 - j))
c[t1][i + 1][j] = (c[t1][i + 1][j] + c[1 - t1][i][j]) % MOD;
//if(c[t1][i+1][j] > MOD) c[t1][i+1][j] -= MOD;
if (S2[t2 - i + 1] == S1[a - j] && i < a - j && t2 - i + 1 < b - (t2 - j) + 1)
c[t1][i][j + 1] = (c[t1][i][j + 1] + c[1 - t1][i][j]) % MOD;
//if(c[t1][i+1][j] > MOD) c[t1][i+1][j] -= MOD;
}
}
for (i = 0; i <= a; ++i)
for (j = 0; j <= a; ++j)
rez = (rez + c[1 - t1][i][j]) % MOD;
printf("%d\n", rez);
}