Pagini recente » Cod sursa (job #1940230) | Cod sursa (job #2512387) | Cod sursa (job #170141) | Cod sursa (job #107548) | Cod sursa (job #3168673)
#include <iostream>
#include <fstream>
using namespace std;
string s;
int v[2000005];
void build(string ohio)
{
s="";
s+='#';
for (int i=0; i<ohio.size(); i++)
{
s+=ohio[i];
s+='#';
}
return;
}
void man_acher()
{
int mirror=0;
int reflection=0;
int l=0;
int pos=1;
v[0]=1;
for (int i=1; i<s.size(); i++)
{
pos=i;
reflection=mirror-(pos-mirror);
if (pos>mirror+(v[mirror]/2))
{
mirror=pos;
v[mirror]=1; l=1;
while (l>=0&&l<s.size()&&s[mirror-l]==s[mirror+l])
{
v[mirror]+=2;
l++;
}
///cout<<"HM";
}
else if ((reflection-(v[reflection]/2))>(mirror-(v[mirror]/2)))
v[pos]=v[reflection];
else if ((reflection-(v[reflection]/2))<(mirror-(v[mirror]/2)))
v[pos]=(reflection-(mirror-(v[mirror]/2)))*2+1;
else if ((reflection-(v[reflection]/2))==(mirror-(v[mirror]/2)))
{
///cout<<"OH";
mirror=pos;
v[mirror]=v[reflection]; l=v[mirror]/2+1;
while (l>=0&&l<s.size()&&s[mirror-l]==s[mirror+l])
{
v[mirror]+=2;
l++;
}
}
///cout<<"AH"<<mirror<<'\n';
}
return;
}
int main()
{
ifstream cin ("pscpld.in");
ofstream cout ("pscpld.out");
string input;
cin>>input;
build (input);
man_acher();
long long int sum=0;
for (int i=1; i<s.size()-1; i++)
{
//cout<<v[i]<<" ";
sum=sum+0LL+((v[i]+1)/4);
///#a#b#a#a#a#c#
}
cout<<sum;
}