Cod sursa(job #20542)

Utilizator diaDiana Adrisor dia Data 21 februarie 2007 18:46:36
Problema Iv Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
#include <string.h>
#define NMAX 202
#define MOD 3210121

int A[NMAX][NMAX][NMAX], N, M;
char S1[NMAX], S2[NMAX], s[NMAX];

int main()
{
        int t, i, j, sol = 0, l;

        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 = (N+M)/2;
        if (S1[1] == S1[N-1]) A[1][0][0] = 1;
        if (S1[1] == S2[M-1]) A[1][0][1] = 1;
        if (S2[1] == S2[M-1]) A[1][1][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 = 0; j <= M/2; j++)
                {
                        if (S1[t-i+1] == S1[N-t+j-1] && (2*t-i-N-j+2 < 0)) A[t+1][i][j] = (A[t+1][i][j]+A[t][i][j])%MOD;
                        if (S2[i+1] == S2[M-j-1] && (i+2-M+j < 0)) A[t+1][i+1][j+1] = (A[t+1][i+1][j+1]+A[t][i][j])%MOD;
                        if (S2[i+1] == S1[N-t+j-1]) A[t+1][i+1][j] = (A[t+1][i+1][j]+A[t][i][j])%MOD;
                        if (S1[t-i+1] == S2[M-j-1]) A[t+1][i][j+1] = (A[t+1][i][j+1]+A[t][i][j])%MOD;
                }

        for (i = 0; i < N; 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;
        
}