Pagini recente » Cod sursa (job #2369876) | Cod sursa (job #620052) | Cod sursa (job #2453776) | Cod sursa (job #1972489) | Cod sursa (job #3156691)
#include<bits/stdc++.h>
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
int n,d[1000005],e[1000005];
long long s;
char a[1000005];
int E(int i,int j)
{
int k;
for(k=0;a[i-k]==a[j+k]&&a[i-k];++k);
return k;
}
void O()
{
int i,r=0,p=0;
for(i=1;i<=n;++i) {
if(i<=r)
e[i]=min(e[2*p-i],r-i);
e[i]+=E(i-e[i],i+e[i]);
if(e[i]+i>r)
p=i,r=p+e[i];
s+=e[i];
}
}
void V()
{
int i,r=0,p=0;
for(i=1;i<=n;++i)
if(a[i]==a[i+1]) {
if(i<r)
d[i]=min(d[2*p-i],r-i-1);
d[i]+=E(i-d[i],i+d[i]+1);
if(d[i]+i+1>r)
p=i,r=p+1+d[i];
s+=d[i];
}
}
int main ()
{
f>>(a+1),n=strlen(a+1),V(),O(),g<<s;
return 0;
}