Cod sursa(job #3350825)

Utilizator CarenaMironov Cezar Luca Carena Data 13 aprilie 2026 17:12:34
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.59 kb
#include <fstream>
#define int long long

using namespace std;

ifstream in("pscpld.in");
ofstream out("pscpld.out");

const int NMAX=2e6+5;
int n, ans, p[NMAX];
string s, t;

signed main()
{
    in>>s; n=s.size();
    for(int i=0;i<n;i++)
        t+='$', t+=s[i];
    t+='$';
    n=t.size();
    int k=0;
    for(int i=1;i<n;i++)
    {
        if(i<=k+p[k])
            p[i]=min(p[2*k-i], k+p[k]-i);
        if(i+p[i]>=k+p[k])
        {
            while(i+p[i]+1<n && t[i+p[i]+1]==t[i-p[i]-1])
                p[i]++;
            k=i;
        }
        ans+=(p[i]+1)/2;
    }
    out<<ans;
    return 0;
}