Cod sursa(job #2484258)

Utilizator radugheoRadu Mihai Gheorghe radugheo Data 30 octombrie 2019 20:26:14
Problema Iv Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <bits/stdc++.h>
#define MOD 3210121

using namespace std;

ifstream fin  ("iv.in");
ofstream fout ("iv.out");

int l1, l2, l, i, j, L, sol;
int d[505][505][505];

char a[505], b[505];

int main(){
    fin >> a + 1 >> b + 1;
    l1 = strlen (a + 1), l2 = strlen (b + 1), l = l1 + l2;
    if (a[1] == a[l1]){
        d[1][1][1] = 1;
    }
    if (b[1] == b[l2]){
        d[1][0][0] = 1;
    }
    if (a[1] == b[l2]){
        d[1][1][0] = 1;
    }
    if (b[1] == a[l1]){
        d[1][0][1] = 1;
    }
    for (L=2; L<=l/2; L++){
        for (i=0; i<=l1 && i<=L; i++){
            for (j=0; j+i<=l1 && j<=L; j++){
                if(a[i] == a[l1-j+1] && i > 0 && l1 - j + 1 <= l1){
                    d[L][i][j] += d[L-1][i-1][j-1];
                    d[L][i][j] %= MOD;
                }
                if(b[L-i] == b[l2-L+j+1] && L - i > 0 && l2 - L + j + 1 <= l2){
                    d[L][i][j] += d[L-1][i][j];
                    d[L][i][j] %= MOD;
                }
                if(a[i] == b[l2-L+j+1] && i > 0 && l2 - L + j + 1 <= l2){
                    d[L][i][j] += d[L-1][i-1][j];
                    d[L][i][j] %= MOD;
                }
                if(b[L-i]==a[l1-j+1] && L - i > 0 && l1 - j + 1 <= l1){
                    d[L][i][j] += d[L-1][i][j-1];
                    d[L][i][j] %= MOD;
                }
            }
        }
    }
    for(i=0; i<=l1; i++){
        sol+=d[l/2][i][l1-i];
        sol %= MOD;
    }
    fout << sol;
    return 0;
}