Cod sursa(job #2487127)

Utilizator BogauuuBogdan Ivancu Bogauuu Data 3 noiembrie 2019 23:42:41
Problema Iv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#include <cstring>

using namespace std;

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

int n,m,d[4][510][510],af,t,k,i,j,k1;
char a[510],b[510];

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

    return 0;

}