Pagini recente » Cod sursa (job #792062) | Cod sursa (job #724788) | Borderou de evaluare (job #1298051) | Borderou de evaluare (job #3148889) | Cod sursa (job #1231110)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
char s[2000005],s2[1000005];
int len,lung,sol[2000005],mid=0,lim,pas,k=0;
long long res=0;
int main()
{ int i,len=0;
f>>s2+1; lung=strlen(s2+1);
for(i=1;i<=lung;i++)
{
len++; s[len]=s2[i];
if (i<lung) {len++; s[len]='#';}
}
for(i=1;i<=len;i++)
{
if (sol[mid]>=i-mid) sol[i]=min(sol[mid-(i-mid)],lim-i);
while(i-sol[i]-1>=1 && i+sol[i]+1<=len && s[i-sol[i]-1]==s[i+sol[i]+1])
{sol[i]++;
pas++;
}
if (i+sol[i]>lim) {lim=i+sol[i]; mid=i;}
}
for(i=1;i<=len;i++)
{
if (i%2==0)
sol[i]=sol[i]/2+sol[i]%2;
else sol[i]/=2;
res+=sol[i]+(i%2);
}
g<<res;
return 0;
}