Cod sursa(job #1240761)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 12 octombrie 2014 00:18:41
Problema Iv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>
#include <cstring>
#define mod 3210121

using namespace std;

ifstream fin ("iv.in");
ofstream fout ("iv.out");

int d[505][505],d2[505][505],l,i,j,sol,n,m;

char a[505],b[505];

int main () {

    fin>>a;
    fin>>b;
    n=strlen(a);m=strlen(b);

    if (a[0]==a[n-1])
        d[1][1]=1;
    if (a[0]==b[m-1])
        d[1][0]=1;
    if (b[0]==a[n-1])
        d[0][1]=1;
    if (b[0]==b[m-1])
        d[0][0]=1;

    for (l=2;l<=(n+m)/2;l++) {
        for (i=0;i<=n;i++)
            for (j=0;j<=n;j++) {
                if (i+j>n)
                    break;
                if (a[i]==a[n-j-1]&&i+j+2<=n){
                    d2[i+1][j+1]=d[i][j];
                    d2[i+1][j+1]%=mod;
                }
                if (a[i]==b[m-(l-j)]&&i+j+1<=n){
                    d2[i+1][j]+=d[i][j];
                    d2[i+1][j]%=mod;
                }
                if (b[l-i-1]==a[n-j-1]&&i+j+1<=n){
                    d2[i][j+1]+=d[i][j];
                    d2[i][j+1]%=mod;
                }
                if (b[l-i-1]==b[m-(l-j)]){
                    d2[i][j]+=d[i][j];
                    d2[i][j]%=mod;
                }
            }
        for (i=1;i<=n;i++)
            for (j=1;j<=m;j++){
                d[i][j]=d2[i][j];
                d2[i][j]=0;
            }
    }

    for (i=0;i<=n;i++)
        for (j=0;j<=n;j++)
            if (i+j<=n) {
                sol+=d[i][j];
                sol%=mod;
            }
    fout<<sol<<"\n";
    return 0;
}