Cod sursa(job #3257750)

Utilizator Nasa1004Ema Nicole Gheorghe Nasa1004 Data 19 noiembrie 2024 11:07:20
Problema Iv Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <iostream>

using namespace std;
const int NMAX = 500;
const int MOD = 3210121;
using ll = long long;

ll dp[4][NMAX + 2][NMAX + 2];
///dp[i1][j1][i2] - nr de sol pt un pal cu pref fm din i1 din a si j1 din b
///si ca suf i2 din a si i1 + j1 - i2 din b
int main()
{
    string a, b;
    cin >> a >> b;
    dp[0][0][0] = 1; ///init
    int mij = (a.size() + b.size()) / 2;
    for(int sizee = 1; sizee <= mij; sizee++) {
        for(int i1 = 0; i1 <= min((int)a.size(), sizee); i1++) { ///CATE, nu poz
            int j1 = sizee - i1;
            if(j1 > b.size()) ///tot o sa scada
                continue;
            int posi1 = i1 + 1, posj1 = j1 + 1;
            for(int i2 = 0; i2 <= min((int)a.size() - i1, sizee); i2++) {
                int j2 = sizee - i2;
                int posi2 = a.size() - i2, posj2 = b.size() - j2;
                if(j2 > b.size() ||
                   posj2 <= posj1 || posi2 <= posi1)
                    continue;
                if(i1 != 0 && i2 != 0 && a[posi1] == a[posi2])
                    dp[1][j1][i2] += dp[0][j1][i2 - 1];
                if(i1 != 0 && j2 != 0 && a[posi1] == b[posj2])
                    dp[1][j1][i2] += dp[0][j1][i2];
                if(j1 != 0 && i2 != 0 && b[posj1] == a[posi2])
                    dp[1][j1][i2] += dp[1][j1 - 1][i2 - 1];
                if(j1 != 0 && j2 != 0 && b[posj1] == b[posj2])
                    dp[1][j2][i2] += dp[1][j1 - 1][i2];

                dp[1][j2][i2] %= MOD;
            }
        }
        ///pasam de la 1 la 0
        for(int i1 = 0; i1 <= min((int)a.size(), sizee); i1++) {
            int j1 = sizee - i1;
            if(j1 > b.size())
                continue;
            for(int i2 = 0; i2 <= min((int)a.size() - i1, sizee); i2++) {
                int j2 = sizee - i2;
                if(j2 > b.size())
                    continue;

                dp[0][j1][i2] = dp[1][j1][i2];
                dp[1][j1][i2] = 0;
            }
        }
    }
    for(int )
    return 0;
}