Pagini recente » Cod sursa (job #700729) | Borderou de evaluare (job #520040) | Cod sursa (job #571204) | Cod sursa (job #167270) | Cod sursa (job #3226796)
#include <iostream>
#include <fstream>
using namespace std;
string s2,s;
long long v[2000005];
int main()
{
ifstream f ("pscpld.in");
ofstream g ("pscpld.out");
f>>s2;
s+='$';
for (int i=0; i<s2.size(); i++)
{
s+='#';
s+=s2[i];
}
s+='#';
s+='@';
int sz=s.size();
int center=0,right=0,mirror;
for (int i=1; i<sz; i++)
{
int mirror=center*2-i;
if (i<right)
v[i]=min(v[mirror],right-i);
while (s[i+1+v[i]]==s[i-(1+v[i])])
v[i]++;
if (i+v[i]>right)
{
center=i;
right=i+v[i];
}
}
long long ct=0;
for (int i=0; i<sz; i++)
if (v[i])
ct+=(v[i]-1)/2+1;
g<<ct;
}