Cod sursa(job #906450)

Utilizator mitrutstrutMitrea Andrei Ionut mitrutstrut Data 6 martie 2013 20:41:26
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.57 kb
#include<cstring>
#include<cstdio>
#include<algorithm>
#define NMAX 1000000+5
using namespace std;
char s[2*NMAX],S[NMAX];
int i,j,l,r,p[2*NMAX],n,M,C;
long long sol;
int main()
{freopen("pscpld.in","r",stdin);
freopen("pscpld.out","w",stdout);
scanf("%s",S+1);
for(i=1,n=1;S[i];i++,n++) {s[n]=S[i]; p[n]=1; n++;}
s[0]='#'; s[n]='*'; n--;
for(i=1;i<=n;i++)
{
if(i<=M) p[i]=min(p[2*C-i],M-i+1);
l=i-p[i]; r=i+p[i];
for(l--,r++;s[l]==s[r];l-=2,r+=2);
l+=2,r-=2;
p[i]=(r+1)/2-(l+1)/2+1;
if(r>M) {M=r; C=i;}
sol+=(p[i]+1)/2;
}
printf("%lld\n",sol);
return 0;
}