Pagini recente » Cod sursa (job #2256143) | Cod sursa (job #1342032) | Cod sursa (job #713518) | Cod sursa (job #1570439) | Cod sursa (job #165403)
Cod sursa(job #165403)
#include<stdio.h>
#include<string.h>
#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;
// printf("%d %d\n", n1, n2);
a[0][0][0] = 1;
for (i = 0; i <= n1; i ++){
for (j = 0; j <= n2; j ++)
//if (i+j <= n1)
for (k = 0; i+k <= n1; k ++)
if (i+j-k + j <= n2){
if (i+j+k + i+j-k == N)
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; i+k <= n1; k ++)
a[0][j][k] = a[1][j][k], a[1][j][k] = 0;
}
for (i = 0; i <= n1; i ++)
for (j = 0; j <= n2; j ++)
for (k = 0; k <= n1; k ++);
// printf("a[%d][%d][%d][%d] = %d\n", i, j, k, i+j-k, a[i][j][k]);
printf("%d\n", raspuns);
return 0;
}