Pagini recente » Rating Ciprian Tomoiaga (cipri_tom) | Rating Pudak Nurberdiyev (Pudak) | Rating rusti paula (liquidsky) | Cod sursa (job #2058159) | Cod sursa (job #1279360)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
#define MAX 1000003
#define ll long long
char sir[MAX], s[2*MAX];
long long rez;
ll cate;
int n, v[2*MAX];
int main()
{
int i, imax=1, lgmax=1;
fin>>(sir+1);
s[0] = '$';
for(i=1; sir[i]!='\0'; i++)
{
s[++n] = sir[i];
s[++n] = '#';
}
s[n] = '%';
//fout<<s;
v[1] = 1;
for(i=2; i<n; i++)
{
if(imax+lgmax-1 >= i)
v[i] = (v[2*imax-i] < imax+lgmax-i ) ? v[2*imax-i] : imax+lgmax-i;
else
v[i] = 1;
while(s[i+v[i]] == s[i-v[i]])
v[i]++;
if(i+v[i] > imax+lgmax)
{
imax = i;
lgmax = v[i];
}
}
for(i=3; i<=n-3; i+=2)
rez += (v[i]-1)/2;
for(i=2; i<=n-2; i+=2)
rez += (v[i]-1)/2;
rez += n/2;
fout<<rez;
}