Pagini recente » Cod sursa (job #2143808) | Cod sursa (job #421188) | Cod sursa (job #1302220) | Cod sursa (job #2400828) | Cod sursa (job #2305071)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
const int MAXN=1000000;
using namespace std;
string s;
int z[2*MAXN+5];
long long ans=0;
int main()
{
freopen( "pscpld.in", "r", stdin );
freopen( "pscpld.out", "w", stdout );
char c;
while( cin>>c )
{
s.push_back('*');
s.push_back(c);
}
s.push_back('*');
int st=0, dr=0, n=s.size();
for( int i=1;i<n-1;i++ )
{
if( i>dr )
z[i]=0;
else
z[i]=min(dr-i,z[dr-st+i]);
while( 0<=i-z[i] && i+z[i]<=n-1 && s[i-z[i]]==s[i+z[i]] )
z[i]++;
z[i]--;
ans+=z[i];
if( i+z[i]>dr )
{
st=i-z[i];
dr=i+z[i];
}
}
cout<<(ans+n/2)/2;
return 0;
}