Cod sursa(job #2485127)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 1 noiembrie 2019 00:36:07
Problema Iv Scor 35
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
using namespace std;
#define dim 505
#define mod 3210121
ifstream fin("iv.in");
ofstream fout("iv.out");
int d[dim][dim][dim],sts,stj,drs,drj,l,i,j,n,m,sol;
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][1][1]=1;
  if(s2[1]==s2[m])
    d[1][0][0]=1;
  if(s1[1]==s2[n])
    d[1][1][0]=1;
  if(s2[1]==s1[n])
    d[1][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++){
        if(s1[i]==s1[n-j+1]&&i*j>0){
            d[l][i][j] += d[l-1][i-1][j-1];
        }
        if(s1[i]==s2[m-(l-j)+1]&&i>0&&j<l){
            d[l][i][j] += d[l-1][i-1][j];
        }
        if(s2[l-i]==s1[n-j+1] && i<l && j>0){
            d[l][i][j] +=  d[l-1][i][j-1];
        }
        if(s2[l-i]==s2[m-(l-j)+1] && i<l && j<l){
            d[l][i][j] += d[l-1][i][j];
        }
        d[l][i][j]%=mod;
    }
  }
  if ((n+m)%2==0)
        for (i=0;i<=n;i++,sol%=mod)
            sol+=d[l-1][i][n-i];
    else
        for (i=0;i<n;i++,sol%=mod)
            sol+=d[l-1][i][n-i-1]+d[l-1][i][n-1];

    fout<<sol;
}