Pagini recente » Cod sursa (job #671053) | Cod sursa (job #1398044) | Cod sursa (job #1956094) | Cod sursa (job #1993255) | Cod sursa (job #2760936)
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
using namespace std;
ifstream in("pscpld.in");
ofstream out("pscpld.out");
int i,j,v[1000005],w[1000005],lim,dist,piv;
long long r;
string s;
int main()
{
in>>s;
for(i=0;i<s.size();i++)
{
int dist=min(lim-i,v[2*piv-i]);
int st=i-dist;
int dr=i+dist;
while(st>=0&&dr<s.size()&&s[st]==s[dr])
{
st--;
dr++;
dist++;
}
if(dr>lim)
{
lim=dr;
piv=i;
}
v[i]=dist;
r=(long long)(r+v[i]);
}
lim=0;
piv=0;
for(i=0;i<s.size();i++)
{
int dist=max(min(lim-i-1,w[piv-i]),0);
int st=i-dist;
int dr=i+dist+1;
while(st>=0&&dr<s.size()&&s[st]==s[dr])
{
st--;
dr++;
dist++;
}
if(dr>lim)
{
lim=dr;
piv=2*i+1;
}
w[i]=dist;
r=(long long)(r+w[i]);
}
out<<r;
}