Pagini recente » Cod sursa (job #330271) | Cod sursa (job #1019500) | Cod sursa (job #1103547) | Cod sursa (job #2686115) | Cod sursa (job #2387453)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
int n,i,j,c,r,l,dp[1000005];
string s;
void transform(string &s)
{
string t=s;
s=" #";
for(i=0;i<t.size();i++)
s=s+t[i]+"#";
}
int main() {
fin>>s;
transform(s);
n=(int)s.size()-1;
c=1;
r=1;
for(i=2;i<=n;i++)
{
j=c-(i-c);
if(i<=r) dp[i]=min(dp[j], r-i);
if(i>=r || r-i<=dp[j])
{
c=i;
r=max(r,i);
while(2*c-r-1>0 && r<n && s[r+1]==s[2*c-r-1])
r++;
dp[i]=r-c;
}
}
/*
for(i=1;i<=n;i++)
cout<<s[i]<<" "; cout<<"\n";
for(j=1;j<=n;j++)
cout<<dp[j]<<" "; cout<<"\n";
*/
long long rez=0;
for(i=1;i<=n;i++)
rez+=1LL*(dp[i]+1)/2;
fout<<rez<<"\n";
}