Cod sursa(job #2484914)

Utilizator Raresr14Rosca Rares Raresr14 Data 31 octombrie 2019 19:09:37
Problema Iv Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 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[501][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[p][i][j]+=D[p-1][i-1][j-1];
                    D[p][i][j]%=MOD;
                }
                if(a[i]==b[l2-p+j+1]&&i>=1&&j<p){
                    D[p][i][j]+=D[p-1][i-1][j];
                    D[p][i][j]%=MOD;
                }
                if(b[p-i]==b[l2-p+j+1]&&i<p&&j<p){
                    D[p][i][j]+=D[p-1][i][j];
                    D[p][i][j]%=MOD;
                }
                if(a[l1-j+1]==b[p-i]&&i<p&&j>=1){
                    D[p][i][j]+=D[p-1][i][j-1];
                    D[p][i][j]%=MOD;
                }
            }
    for(i=0;i<=l1;i++){
        sol+=D[(l1+l2)/2][i][l1-i];
        sol%=MOD;
    }
    fout<<sol;
    return 0;
}