Pagini recente » Cod sursa (job #1945488) | Cod sursa (job #303473) | Cod sursa (job #906100) | Cod sursa (job #837195) | Cod sursa (job #2847438)
#include <bits/stdc++.h>
#define int int64_t
using namespace std;
ifstream in("pscpld.in");
ofstream out("pscpld.out");
int mana[2*1000005];
int32_t main()
{
string s;
char c;
s+='$';
while(in>>c)
{
s+=c;
s+='$';
}
int dr,mid;
dr=mid=-1;
int rez=s.size()/2;
for(int i=0;i<s.size();i++)
{
if(i<=dr)mana[i]=min(mana[2*mid-i],dr-i);
while(s[i+mana[i]+1]==s[i-mana[i]-1]&&i+mana[i]+1<s.size())mana[i]++;
if(i+mana[i]>dr)
{
mid=i;
dr=i+mana[i];
}
rez+=mana[i]/2;
}
out<<rez;
}