Cod sursa(job #1305080)

Utilizator ButnaruButnaru George Butnaru Data 29 decembrie 2014 15:32:14
Problema PScPld Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.79 kb
program palin;
type
tabel=array[0..2000001] of longint;
var
l:tabel;
v:array[0..1000001] of char;
s:ansistring;
ul,pr,i,nrsol,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);
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.