Pagini recente » Cod sursa (job #2800147) | Cod sursa (job #1950191) | Cod sursa (job #1276950) | Cod sursa (job #2005692) | Cod sursa (job #2593784)
#include <bits/stdc++.h>
#define Nmax 10000005
using namespace std;
ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");
string s;
char c;
long long rez;
int lg[Nmax], stp, drp;
int main()
{
while(fin >> c)
{
s+='*';
s+=c;
}
s+='*';
for(int i=0;i<s.size();i++)
{
int dr = max(i, min(drp, i+(lg[stp+drp-i]-1)/2));
while(dr<s.size() && 2*i-dr>=0 && s[2*i-dr]==s[dr]) dr++;
dr--;
if(dr>drp)
{
drp=dr;
stp=2*i-dr;
}
lg[i]=2*(dr-i)+1;
rez+=lg[i]/4;
if(s[i]!='*')
rez++;
}
fout << rez;
return 0;
}