Pagini recente » Cod sursa (job #816854) | Cod sursa (job #1715406) | Cod sursa (job #2384864) | Cod sursa (job #941419) | Cod sursa (job #20573)
Cod sursa(job #20573)
#include <stdio.h>
#include <string.h>
#define NMAX 202
#define MOD 3210121
int A[2*NMAX][NMAX][NMAX], N, M;
char S1[NMAX], S2[NMAX], s[NMAX];
int main()
{
int t, i, j, sol = 0, l, x;
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 = -1+(N+M)/2;
if (S1[1] == S1[N-1]) A[1][0][0] = 1;
if (S1[1] == S2[M-1]) A[1][0][M-1] = 1;
if (S2[1] == S2[M-1]) A[1][1][M-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 = M-1; j >= M/2; j--)
{
if ((t-j+1 >= 0) && (S2[i+1] == S1[t-j+1])) A[t+1][i+1][j] = (A[t+1][i+1][j]+A[t][i][j])%MOD;
if ((j>0) && (t-i+1>=0) && (S2[j-1] == S1[t-i+1])) A[t+1][i][j-1] = (A[t+1][i][j-1]+A[t][i][j])%MOD;
if ((t-i+1>=0) && (t-j+1>=0) && (S1[t-i+1] == S1[t-j+1])) A[t+1][i][j] = (A[t+1][i][j]+A[t][i][j])%MOD;
if (j>0 && S2[i+1] == S2[j-1]) A[t+1][i+1][j-1] = (A[t+1][i+1][j-1]+A[t][i][j])%MOD;
}
for (i = 0; i <= M; 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;
}