Cod sursa(job #2486783)

Utilizator BogauuuBogdan Ivancu Bogauuu Data 3 noiembrie 2019 14:40:19
Problema Iv Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <cstring>

using namespace std;

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

char a[505],b[505];

int n,m,t,k,i,j,af,d[3][510][510];

int main()
{
    fin >> a+1;
    fin >> b+1;
    n=strlen(a+1);
    m=strlen(b+1);
    if (a[1]==a[n]) d[1][1][1]=1;
    if (a[1]==b[m]) d[1][1][0]=1;
    if (b[1]==b[m]) d[1][0][0]=1;
    if (b[1]==a[n]) d[1][0][1]=1;
    t=0;
    for (k=2;k<=(n+m)/2;k++)
    {
        for (i=0;i<=n && i<=k;i++)
        {
            for (j=0;j+i<=n && j<=k;j++)
            {
                if (a[i]==a[n-j+1] && i>0 && n-j+1<=n) d[t][i][j]+=d[1-t][i-1][j-1];
                if (a[i]==b[m-k+j+1] && i>0 && m-k+j+1<=m) d[t][i][j]+=d[1-t][i-1][j];
                if (b[k-i]==a[n-j+1] && k-i>0 && n-j+1<=n) d[t][i][j]+=d[1-t][i][j-1];
                if (b[k-i]==b[m-k+j+1] && k-i>0 && m-k+j+1<=m) d[t][i][j]+=d[1-t][i][j];
                d[t][i][j]%=3210121;
            }
        }
        if (t==0) t=1;
        else t=0;
    }
    if (t==0) t=1;
    else t=0;
    if ((n+m)%2) for (i=0;i<n;i++)
    {
        af+=d[t][i][n-i];
        af%=3210121;
        af+=d[t][i][n-i-1];
        af%=3210121;
    }
    else for (i=0;i<=n;i++)
    {
        af+=d[t][i][n-i];
        af%=3210121;
    }
    fout << af;

    return 0;
}