Cod sursa(job #2899826)

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

using namespace std;



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

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

long long ans;

char s[20005];

void solve()
{
    fin>>ss;
    s[0]='%';
    for(i=0;ss[i];i++)
    {
        s[++n]='#';
        s[++n]=ss[i];
    }
    s[++n]='#';
    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++)
    {
        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;
}