Cod sursa(job #2395128)

Utilizator patcasrarespatcas rares danut patcasrares Data 2 aprilie 2019 11:40:22
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
const int DN=1e6+5;
int n,m,z,ls,ld,k;
string s,ss;
long long sol;
int dp[2*DN];
int main()
{
    getline(fin,ss);
    s="#";
    for(int i=0;i<ss.size();i++)
    {
        s+=ss[i];
        s+="#";
    }
    n=s.size();
    ls=0;
    ld=-1;
    for(int i=0;i<n;i++)
    {
        if(i>ld)
            k=1;
        else
            k=min(ld-i,dp[ls+ld-i]);
        while(i-k>=0&&i+k<n&&s[i-k]==s[i+k]) k++;
        dp[i]=k;
        k--;
        sol+=dp[i]/2;
        if(i+k>ld)
        {
            ld=i+k;
            ls=i-k;
        }
    }
    fout<<sol;
}