Pagini recente » Cod sursa (job #1309819) | Cod sursa (job #33110) | Cod sursa (job #1246337) | Cod sursa (job #678048) | Cod sursa (job #46940)
Cod sursa(job #46940)
#include <stdio.h>
#include <string.h>
#define NMAX 64
#define mod2(a) ((a) >= 3210121 ? ((a)-3210121):(a))
#define mod(a) ((a) % 3210121)
int DP[NMAX][NMAX][NMAX][NMAX], N, M;
int A[NMAX], B[NMAX];
char a[NMAX], b[NMAX];
int main()
{
int i, j, k, l, sol = 0, xxx;
freopen("iv.in", "r", stdin);
gets(a); gets(b);
N = strlen(a); M = strlen(b);
for (i = 1; i <= N; i++)
A[i] = (int)a[i-1];
for (i = 1; i <= M; i++)
B[i] = (int)b[i-1];
DP[0][0][0][0] = 1;
for (i = 0; i <= N; i++)
for (j = 0; j <= N; j++)
if (i + j < N)
for (k = 0; k <= M; k++)
for (l = 0; l <= M; l++)
if (k + l < M && DP[i][j][k][l] > 0)
{
if (A[i+1] == A[N-j]) DP[i+1][j+1][k][l] = mod(DP[i+1][j+1][k][l]+DP[i][j][k][l]);
if (A[i+1] == B[M-l]) DP[i+1][j][k][l+1] = mod(DP[i+1][j][k][l+1]+DP[i][j][k][l]);
if (B[k+1] == A[N-j]) DP[i][j+1][k+1][l] = mod(DP[i][j+1][k+1][l]+DP[i][j][k][l]);
if (B[k+1] == B[M-l]) DP[i][j][k+1][l+1] = mod(DP[i][j][k+1][l+1]+DP[i][j][k][l]);
}
xxx = N+M-((N+M)&1);
for (i = 0; i <= N; i++)
for (j = 0; j <= N; j++)
if (i + j <= N)
for (k = 0; k <= M; k++)
for (l = 0; l <= M; l++)
if (k + l <= M)
if (i+j+k+l == xxx) sol = mod(sol+DP[i][j][k][l]);
freopen("iv.out", "w", stdout);
printf("%d\n", sol);
return 0;
}