Cod sursa(job #2485150)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 1 noiembrie 2019 01:12:21
Problema Iv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>
using namespace std;
#define dim 505
#define mod 3210121
ifstream fin("iv.in");
ofstream fout("iv.out");
int d[2][dim][dim],sts,stj,drs,drj,l,i,j,n,m,sol,act;
char s1[dim],s2[dim];

int main()
{
  fin>>(s1+1)>>(s2+1);
  n=strlen(s1+1);
  m=strlen(s2+1);
  if(s1[1]==s1[n])
    d[1-act][1][1]=1;
  if(s2[1]==s2[m])
    d[1-act][0][0]=1;
  if(s1[1]==s2[m])
    d[1-act][1][0]=1;
  if(s2[1]==s1[n])
    d[1-act][0][1]=1;
   for(l=2;l<=(n+m)/2;l++){
        for(i=0;i<=n && i<=l;i++){
            for(j=0;i+j<=n && j<=l;j++){
                d[act][i][j]=0;
                if(s1[i]==s1[n-j+1] && i>0 && n-j+1<=n)
                    d[act][i][j]+=d[1-act][i-1][j-1];



                if(s1[i]==s2[m-l+j+1] && i>0 && m-l+j+1<=m)
                    d[act][i][j]+=d[1-act][i-1][j];


                if(s2[l-i]==s1[n-j+1] && l-i>0 && n-j+1<=n)
                    d[act][i][j]+=d[1-act][i][j-1];


                if(s2[l-i]==s2[m-l+j+1] && l-i>0 && m-l+j+1<=m)
                    d[act][i][j]+=d[1-act][i][j];
                 d[act][i][j]%=mod;
            }


    }
    act=1-act;
  }

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

    fout<<sol;
}