Cod sursa(job #2485283)

Utilizator qThunderStefan Durlanescu qThunder Data 1 noiembrie 2019 11:28:19
Problema Iv Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");


int n,m,d[4][510][510],s,t,k;
char a[510],b[510];
int main()
{
    int mod=3210121;
    fin>>a+1>>b+1;
    n=strlen(a);
    m=strlen(b);
    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(int k1=2;k1<=(n+m)/2;k1++)
    {
        for(int i=0;i<=n && i<=k1;i++)
        {
            for(int j=0; j<=m && j+i<=n;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]%=mod;

                }
                if(a[i]==b[m-j+1] && i>0 && m-k1+j+1<=m)
                {
                    d[k][i][j]+=d[1-k][i-1][j];
                    d[k][i][j]%=mod;

                }
                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]%=mod;

                }
                if(a[i]==a[n-1] && k1-i>0 && m-k1+j+1<=m)
                {
                    d[k][i][j]+=d[1-k][i][j];
                    d[k][i][j]%=mod;

                }
            }
        }
        k=1-k;
    }
    k=1-k;
    if((n+m)%2)
        for(int i=0;i<n;i++){
            s+=d[k][i][n-i];
            s%=mod;
            s+=d[k][i][n-i-1];
            s%=mod;
        }
    else
        for(int i=0;i<=n;i++){
            s+=d[k][i][n-i];
            s%=mod;
        }

    fout<<s;
    return 0;
}