Cod sursa(job #2899825)

Utilizator alexdumitruAlexandru Dumitru alexdumitru Data 9 mai 2022 10:21:13
Problema PScPld Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;



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

string ss,s;
int i,n,z[2000005],l,r;
int mymin(int a, int b)
{
    return (a<b?a:b);
}

long long ans;

void solve()
{
    fin>>ss;
    int lg=ss.length();
    s="%";
    for(i=0;i<lg;i++)
    {
        s+='#';
        s+=ss[i];
    }
    s+='#';
    n=s.length()-1;
    for(i=1;i<=n;i++)
    {
        if(i<=r)
            z[i]=mymin(z[l+r-i],r-i+1);
        while(i-z[i]>0&&i+z[i]<=n&&s[i-z[i]]==s[i+z[i]])z[i]++;
        if(i+z[i]-1>r)
        {
            r=i+z[i]-1;
            l=i-z[i]+1;
        }
    }
    /*for(i=1;i<=n;i++)
        cout<<s[i]<<' ';
    cout<<'\n';
    for(i=1;i<=n;i++)
        cout<<z[i]<<' ';
    cout<<'\n';*/
    for(i=1;i<=n;i++)
    {
        ans+=(z[i]>>1);
    }
    fout<<ans<<'\n';
}

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int tt=1;
    //cin>>tt;
    for(int t=1;t<=tt;t++)
        solve();
    return 0;
}