Pagini recente » Cod sursa (job #2556084) | Cod sursa (job #3252076) | Cod sursa (job #2258736) | Cod sursa (job #3225725) | Cod sursa (job #783391)
Cod sursa(job #783391)
#include <fstream>
#include <string.h>
#define DIM 510
#define MOD 3210121
using namespace std;
int D[2][DIM][DIM];
int N, M, p1, p2, p3, q1, q2, q3, i, j, k, L, sol;
char A[DIM];
char B[DIM];
int main() {
ifstream f("iv.in");
ofstream g("iv.out");
f>>A+1;
f>>B+1;
N = strlen(A+1);
M = strlen(B+1);
A[0] = '0';
B[0] = '1';
A[N+1] = '2';
B[M+1] = '3';
L = (N+M)/2;
D[0][0][L+1] = 1;
for (i=1; i<=L;i++) {
//sunt i caractere in stanga palindromului si i caractere in dreapta
for (p1 = 0; p1<=N; p1++) {
q1 = i - p1;
if (q1 >= 0) {
for (p3 = 0; p3 <= i; p3++) {
q3 = i - p3;
if (q3 >= 0 && p1 + p3 <= N && q1 + q3 <= M) {
p2 = N-p3+1;
q2 = M-q3+1;
if (A[p1] == A[p2]) {
D[1][p1][p2] += D[0][p1-1][p2+1];
D[1][p1][p2] %= MOD;
}
if (A[p1] == B[q2]) {
D[1][p1][p2] += D[0][p1-1][p2];
D[1][p1][p2] %= MOD;
}
if (B[q1] == A[p2]) {
D[1][p1][p2] += D[0][p1][p2+1];
D[1][p1][p2] %= MOD;
}
if (B[q1] == B[q2]) {
D[1][p1][p2] += D[0][p1][p2];
D[1][p1][p2] %= MOD;
}
}
}
}
}
for (j=0;j<=N+M+1;j++)
for (k=0;k<=N+M+1;k++) {
D[0][j][k] = D[1][j][k];
D[1][j][k] = 0;
}
}
sol = 0;
for (i=0;i<=N+M+1;i++)
for (j=0; j<=N+M+1;j++){
sol += D[0][i][j];
if (sol >= MOD)
sol -= MOD;
}
g<<sol<<"\n";
return 0;
}