Cod sursa(job #1256165)

Utilizator acomAndrei Comaneci acom Data 5 noiembrie 2014 20:43:53
Problema Iv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<fstream>
#include<cstring>
using namespace std;
#define MOD 3210121
ifstream fin("iv.in");
ofstream fout("iv.out");
char a[512],b[512],aux[512];
int n,m,p,sol,D[512][512],E[512][512];
int main()
{
    int i,j,k;
    fin>>(a+1)>>(b+1);
    n=strlen(a+1), m=strlen(b+1);
    E[0][0]=1, p=(m+n)>>1;
    for (k=1;k<=p;++k)
    {
        for (i=0;i<=n;++i)
            for (j=0;j<=n;++j)
            {
                D[i][j]=0;
                if (a[i]==a[n-j+1] && i>0 && j>0)
                    D[i][j]+=E[i-1][j-1];
                if (a[i]==b[m-k+j+1] && i>0)
                    D[i][j]+=E[i-1][j];
                if (b[k-i]==a[n-j+1] && j>0)
                    D[i][j]+=E[i][j-1];
                if (b[k-i]==b[m-k+j+1])
                    D[i][j]+=E[i][j];
                while (D[i][j]>MOD)
                    D[i][j]-=MOD;
            }
        for (i=0;i<=n;++i)
            for (j=0;j<=n;++j)
                E[i][j]=D[i][j];
    }
    for (i=0;i<=n && i<=p;++i)
        for (j=0;j<=n && i<=p;++j)
            if (i+j<=n && 2*p<=m+i+j)
            {
                sol+=D[i][j];
                while (sol>MOD)
                    sol-=MOD;
            }
    fout<<sol<<"\n";
    return 0;
}