Cod sursa(job #20573)

Utilizator diaDiana Adrisor dia Data 21 februarie 2007 19:22:48
Problema Iv Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.45 kb
#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;
        
}