Pagini recente » Cod sursa (job #182556) | Profil Pannda | Cod sursa (job #1186543) | Cod sursa (job #255089)
Cod sursa(job #255089)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxN 505
#define mod 3210121
int N, M;
int C[maxN][maxN][2];
char A[maxN], B[maxN];
int Sol = 0;
int main(){
int i, j, a, b;
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
gets(A + 1); A[0] = 'a'; N = strlen(A); N --;
gets(B + 1); B[0] = 'a'; M = strlen(B); M --;
//fprintf(stderr, "%d %d\n", N, M);
C[0][0][0] = 1; // initializez matricea pt dinamica
// fac dinamica
for (a = 1, b = 0; b < (N + M) >> 1; a ^= 1, b++){
for (i = 0; i <= N; ++i)
for (j = 0; j <= M; ++j)
C[i][j][a] = 0;
for (i = 0; i <= N; ++i)
for (j = 0; j <= N; ++j)
if (C[i][j][a ^ 1] != 0){
if (A[i + 1] == A[N - j] && i + 1 + j < N)
C[i + 1][j + 1][a] = (C[i + 1][j + 1][a] + C[i][j][a ^ 1]) % mod;
if (B[b - i + 1] == B[M - b + j] && (b << 1) < M + i + j - 1)
C[i][j][a] = (C[i][j][a] + C[i][j][a ^ 1]) % mod;
if (A[i + 1] == B[M - b + j] && i + j < N && (b << 1) < M + i + j)
C[i + 1][j][a] = (C[i + 1][j][a] + C[i][j][a ^ 1]) % mod;
if (B[b - i + 1] == A[N - j] && i + j < N && (b << 1) < M + i + j)
C[i][j + 1][a] = (C[i][j + 1][a] + C[i][j][a ^ 1]) % mod;
}
}
/* for (i = 1; i <= N; ++i){
for (j = 0; j <= N; ++j)
printf("%d ", C[i][j][0]);
puts("");
}*/
for (i = 0; i <= N; ++i)
for (j = 0; j <= N; ++j)
Sol = (Sol + C[i][j][a ^ 1]) % mod;
printf("%d\n", Sol);
}