Cod sursa(job #2484968)

Utilizator radugnnGone Radu Mihnea radugnn Data 31 octombrie 2019 20:19:05
Problema Iv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string.h>
#define MOD 3210121
using namespace std;
ifstream fin ("iv.in");
ofstream fout ("iv.out");
int D[2][510][510];
int lng1,lng2,L,i,j,LUNGIME_TOTALA,sol;
char a[510],b[510];
int main(){
    fin>>a+1;
    fin>>b+1;
    lng1 = strlen(a+1);
    lng2 = strlen(b+1);
    if(a[1]==a[lng1])
        D[0][1][1] = 1;
    if(b[1]==b[lng2])
        D[0][0][0] = 1;
    if(a[1]==b[lng2])
        D[0][1][0] = 1;
    if(b[1]==a[lng1])
        D[0][0][1] = 1;
    //cout<<D[0][0][1];
    LUNGIME_TOTALA = lng1 + lng2;
    for(L=2;L<=LUNGIME_TOTALA/2;L++){
        for(i=0;i<=L && i<=lng1;i++)
            for(j=0;j+i<=lng1 && j<=L;j++){
                D[1][i][j]=0;
                if(i>=1 && j>=1 && a[i]==a[lng1-j+1])
                    D[1][i][j]+=D[0][i-1][j-1];
                if(i<L && j<L && b[L-i]==b[lng2-L+j+1])
                    D[1][i][j]+=D[0][i][j];
                if(i>=1 && j<L && a[i]==b[lng2-L+j+1])
                    D[1][i][j]+=D[0][i-1][j];
                if(i<L && j>=1 && b[L-i]==a[lng1-j+1])
                    D[1][i][j]+=D[0][i][j-1];
                D[1][i][j]%=MOD;
            }

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