Pagini recente » Cod sursa (job #1763329) | Cod sursa (job #4087) | Cod sursa (job #2684576) | Rating Razvan (AvramRazvan) | Cod sursa (job #20546)
Cod sursa(job #20546)
#include <stdio.h>
#include <string.h>
#define NMAX 202
#define MOD 3210121
int A[NMAX][NMAX][NMAX], N, M;
char S1[NMAX], S2[NMAX], s[NMAX];
int main()
{
int t, i, j, sol = 0, l;
freopen("iv.in", "r", stdin);
gets(s);
S1[0] = ' ';
strcat(S1, s);
gets(s);
S2[0] = ' ';
strcat(S2, s);
N = strlen(S1); M = strlen(S2);
l = (N+M)/2;
if (S1[1] == S1[N-1]) A[1][0][0] = 1;
if (S1[1] == S2[M-1]) A[1][0][1] = 1;
if (S2[1] == S2[M-1]) A[1][1][1] = 1;
if (S2[1] == S1[N-1]) A[1][1][0] = 1;
for (t = 1; t < l; t++)
for (i = 0; i <= M/2; i++)
for (j = 0; j <= M/2; j++)
{
if (S1[t-i+1] == S1[N-t+j-1] && (2*t-i-N-j+2 < 0) && (t-i+1 >= 0) && (N-t+j>0)) A[t+1][i][j] = (A[t+1][i][j]+A[t][i][j])%MOD;
if (S2[i+1] == S2[M-j-1] && (i+2-M+j < 0)) A[t+1][i+1][j+1] = (A[t+1][i+1][j+1]+A[t][i][j])%MOD;
if (S2[i+1] == S1[N-t+j-1] && (N-t+j+1 >= 0)) A[t+1][i+1][j] = (A[t+1][i+1][j]+A[t][i][j])%MOD;
if (S1[t-i+1] == S2[M-j-1] && (t-i+1 >= 0)) A[t+1][i][j+1] = (A[t+1][i][j+1]+A[t][i][j])%MOD;
}
for (i = 0; i < N; i++)
for (j = 0; j < M; j++) sol = (sol+A[l][i][j])%MOD;
freopen("iv.out", "w", stdout);
printf("%d\n", sol);
return 0;
}