Pagini recente » Cod sursa (job #596378) | Cod sursa (job #1280923) | Cod sursa (job #647036) | Cod sursa (job #513609) | Cod sursa (job #2593960)
#include <bits/stdc++.h>
#define Nmax 1000005
using namespace std;
ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");
char c;
string s;
int lg[Nmax], st, dr;
long long rez;
int main()
{
while(fin >> c)
{
s+='*';
s+=c;
}
s+='*';
for(int i=0;i<s.size();i++)
{
int k=1;
if(i<=dr)
k=min(dr-i+1, lg[st+dr-i]);
while(i+k<s.size() && i-k>=0 && s[i+k]==s[i-k]) k++;
lg[i]=k;
k--;
if(i+k>dr)
{
dr=i+k;
st=i-k;
}
rez+=lg[i]/2;
}
fout << rez;
return 0;
}