Pagini recente » Cod sursa (job #1597607) | Cod sursa (job #2556437) | Cod sursa (job #2324038) | Cod sursa (job #543560) | Cod sursa (job #2548343)
#include <fstream>
#include <string>
using namespace std;
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
int n,ex[2000100],c,r,lg;
long long ans;
char ch;
string str;
int main()
{
str+='#';
while(cin>>ch)
{
str+=ch;
str+='#';
}
ex[0]=1;
c=0;
r=0;
for(int i=1; i<str.size(); ++i)
{
lg=1;
if(i<=r)
lg=min(ex[2*c-i],r-i+1);
while(i-lg>=0 && i+lg<str.size() && str[i+lg]==str[i-lg]) ++lg;
if(i+lg-1>r)
r=i+lg-1, c=i;
ex[i]=lg;
ans+=ex[i]/2;
}
cout<<ans<<'\n';
return 0;
}