Cod sursa(job #2798413)

Utilizator bem.andreiIceman bem.andrei Data 11 noiembrie 2021 11:46:46
Problema PScPld Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;
ifstream r("pscpld.in");
ofstream w("pscpld.out");
int solve(string str, int n)
{
    int d[n+3][n+3];
    memset(d, 0, sizeof(d));
    bool p[n+3][n+3];
    memset(p, false, sizeof(p));
    for (int i=0;i<n;i++){
        p[i][i]=true;
    }
    for(int i=0;i<n-1;i++){
        if(str[i]==str[i+1]){
            p[i][i+1]=true;
            d[i][i+1]=1;
        }
    }
    for (int gap=2;gap<n;gap++) {
        for (int i=0;i<n-gap;i++) {
            int j=gap+i;
            if (str[i] == str[j] && p[i + 1][j - 1]==true){
                p[i][j]=true;
            }
            if (p[i][j]==true){
                d[i][j]=d[i][j - 1]+d[i + 1][j]+1-d[i + 1][j - 1];
            }
            else{
                d[i][j]=d[i][j - 1]+d[i + 1][j]-d[i + 1][j - 1];
            }
        }
    }
    return d[0][n - 1];
}
int main()
{
    string s;
    r>>s;
    int n=s.size();
    w<<solve(s,n)+n<<"\n";
    return 0;
}