Cod sursa(job #1305092)

Utilizator ButnaruButnaru George Butnaru Data 29 decembrie 2014 15:35:08
Problema PScPld Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.88 kb
program palin;
type
tabel=array[0..2000100] of longint;
buf=array[0..1 shl 17] of char;
var
ff1,ff2:buf;
l:tabel;
v:array[0..2000100] of char;
s:ansistring;
nrsol:int64;
ul,pr,i,nr:longint;
f1,f2:text;
function min(a,b:longint):longint;
begin
if a<b then min:=a else min:=b;
end;
begin
assign (f1,'pscpld.in');
assign (f2,'pscpld.out');
reset (f1);
rewrite (f2);
settextbuf(f1,ff1);
settextbuf(f2,ff2);
readln (f1,s);
nr:=1;
for i:=1 to length(s) do begin
nr:=nr+1;
v[nr]:=s[i];
nr:=nr+1;
v[nr]:=' ';
end;
v[1]:=' ';
l[1]:=1;
ul:=1; pr:=1;
for i:=1 to nr do begin
if ul>i then l[i]:=min(l[2*pr-i],ul-i) else l[i]:=1;
while (v[i-l[i]]=v[i+l[i]]) and (i-l[i]>=1) and (i+l[i]<=nr+1) do l[i]:=l[i]+1;
if i+l[i]>ul then begin
ul:=i+l[i];
pr:=i;
end; end;
nrsol:=0;
for i:=1 to nr do
nrsol:=nrsol+(l[i] div 2);
writeln (f2,nrsol);
close (f1);
close (f2);
end.