Cod sursa(job #2909347)

Utilizator mihneazzzMacovei Daniel mihneazzz Data 13 iunie 2022 00:09:26
Problema PScPld Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <bits/stdc++.h>
#define N 1000005
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
int n,d[2*N];
long long ct;
string s;
long long Manacher(string s)
{
    n=s.size();
    s="$"+s+"^";
    int l=1,r=1;
    for(int i=1;i<n;i++)
    {
        d[i]=max(0,min(r-i,d[l+(r-i)]));
        while(s[i-d[i]]==s[i+d[i]]) d[i]++;
        if(i+d[i]>r) l=i-d[i],r=i+d[i];
    }
    for(int i=0;i<n;i+=2) ct+=(d[i]+1)/2;
    for(int i=1;i<n;i+=2) ct+=d[i]/2;
    ///for(int i=1;i<=n;i++) cout<<d[i]<<" ";
    return ct;
}
int main()
{
    fin>>s;
    string t;
    for(auto c:s) t+=string("#")+c;
    fout<<Manacher(t+"#");
    return 0;
}