Pagini recente » Cod sursa (job #2477698) | Cod sursa (job #1135412) | Cod sursa (job #1048639) | Cod sursa (job #974014) | Cod sursa (job #2955412)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
char q[1000001],s[2100000];
int p[2100000];
int main()
{
s[0]=253;
s[1]=254;
int i=0,j=2,l,r;
fin.getline(q,1000001);
for(i=0; q[i]; i++)
s[j++]=q[i],s[j++]=254;
s[j]=0;
p[1]=0;
l=r=1;
for(i=2; i<j; i++)
{
if(i>r)
p[i]=0;
else
p[i]=min(p[l+r-i],r-i);
while(s[i-p[i]]==s[i+p[i]])
p[i]++;
p[i]--;
if(i+p[i]>r)r=i+p[i],l=i-p[i];
}
/**cout<<s<<"\n";
for(i=0;i<j;i++)cout<<p[i];
cout<<"\n";
*/
long long sum=0;
for(i=0;i<j;i++)
if(i%2)sum+=p[i]/2;
else sum+=(p[i]+1)/2;
fout<<sum<<"\n";
return 0;
}