Pagini recente » Cod sursa (job #2324779) | Cod sursa (job #1012608) | Cod sursa (job #759433) | Cod sursa (job #2858635) | Cod sursa (job #2857924)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
string s;
vector <char> a;
int n,cnt[1000005];
int c,dr;
int main()
{
fin>>s;
n=s.size();
a.push_back('$');
for(int i=0; i<n; i++)
{
a.push_back(s[i]);
a.push_back('$');
}
for(int i=0; i<a.size(); i++)
{
if(dr>i)
cnt[i]=min(cnt[2*c-i],dr-i);
while(i+cnt[i]<a.size() && i-cnt[i]>=0 && a[i+cnt[i]]==a[i-cnt[i]])
cnt[i]++;
if(i+cnt[i]-1>dr)
{
dr=i+cnt[i]-1;
c=i;
}
}
long long ans=n;
for(int i=0; i<a.size(); i++)
ans+=(cnt[i]-1)/2;
fout<<ans<<"\n";
return 0;
}