Pagini recente » Cod sursa (job #2408749) | Cod sursa (job #1639492) | Cod sursa (job #2727068) | Cod sursa (job #1999431) | Cod sursa (job #638725)
Cod sursa(job #638725)
#include<cstdio>
#include<cstring>
#define lg 505
#define BAZA 3210121
int N, n1, n2, i, j, k, h, raspuns, a[2][lg][lg];
char sir1[lg], sir2[lg];
int main() {
freopen("iv.in", "rt", stdin);
freopen("iv.out", "wt", stdout);
scanf("%s", sir1+1);
scanf("%s", sir2+1);
n1 = strlen(sir1+1), n2 = strlen(sir2+1);
N = n1 + n2;
a[0][0][0] = 1;
for (i = 0; i <= n1; i ++) {
for (j = 0; j <= n2; j ++)
for (k = 0; i+k <= n1; k ++)
if (i+j-k + j <= n2) {
if (i+j+k + i+j-k == N || i+j+k + i+j-k == N-1)
raspuns = (raspuns + a[0][j][k]) % BAZA;
h = i+j-k;
if (sir1[i+1] == sir1[n1-k])
a[1][j][k+1] = (a[1][j][k+1] + a[0][j][k]) % BAZA;
if (sir1[i+1] == sir2[n2-h])
a[1][j][k] = (a[1][j][k] + a[0][j][k]) % BAZA;
if (sir2[j+1] == sir1[n1-k])
a[0][j+1][k+1] = (a[0][j+1][k+1] + a[0][j][k]) % BAZA;
if (sir2[j+1] == sir2[n2-h])
a[0][j+1][k] = (a[0][j+1][k] + a[0][j][k]) % BAZA;
}
for (j = 0; j <= n2; j ++)
for (k = 0; k <= n1; k ++)
a[0][j][k] = a[1][j][k], a[1][j][k] = 0;
}
printf("%d\n", raspuns);
return 0;
}