Cod sursa(job #2484997)

Utilizator Raresr14Rosca Rares Raresr14 Data 31 octombrie 2019 21:03:13
Problema Iv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
#include <cstring>
#define MOD 3210121
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
int sol,l1,l2,i,j,D[2][501][501];
char a[501],b[501];
int main(){
    fin>>(a+1);
    fin>>(b+1);
    l1=strlen(a+1);
    l2=strlen(b+1);
    if(a[1]==a[l1])
        D[1][1][1]=1;
    if(a[1]==b[l2])
        D[1][1][0]=1;
    if(b[1]==b[l2])
        D[1][0][0]=1;
    if(a[l1]==b[1])
        D[1][0][1]=1;
    for(int p=2;p<=(l1+l2)/2;p++){
        for(i=0;i<=l1&&i<=p;i++){
            for(j=0;j+i<=l1&&j<=p;j++){
                if(a[i]==a[l1-j+1]&&i>=1&&j>=1){
                    D[0][i][j]+=D[1][i-1][j-1];
                    D[0][i][j]%=MOD;
                }
                if(a[i]==b[l2-p+j+1]&&i>=1&&j<p){
                    D[0][i][j]+=D[1][i-1][j];
                    D[0][i][j]%=MOD;
                }
                if(b[p-i]==b[l2-p+j+1]&&i<p&&j<p){
                    D[0][i][j]+=D[1][i][j];
                    D[0][i][j]%=MOD;
                }
                if(a[l1-j+1]==b[p-i]&&i<p&&j>=1){
                    D[0][i][j]+=D[1][i][j-1];
                    D[0][i][j]%=MOD;
                }
            }

        }
        for(i=0;i<=p;i++)
            for(j=0;j<=p;j++){
                D[1][i][j]=D[0][i][j];
                D[0][i][j]=0;
            }
    }
    if((l1+l2)%2){
        for(i=0;i<l1;i++){
            sol+=(D[1][i][l1-i-1]+D[1][i][l1-i])%MOD;
            sol%=MOD;
        }
    }else{
        for(i=0;i<=l1;i++){
            sol+=D[1][i][l1-i];
            sol%=MOD;
        }
    }
    fout<<sol;
    return 0;
}