Pagini recente » Cod sursa (job #1056220) | Cod sursa (job #1944279) | Cod sursa (job #1696613) | Cod sursa (job #1226202) | Cod sursa (job #75185)
Cod sursa(job #75185)
{$INLINE ON}
program PScPld;
const
inp = 'pscpld.in';
out = 'pscpld.out';
maxn = 1000001;
var
a : array[0..maxn shl 1] of char;
f : array[0..maxn shl 1] of longint; // f[i] la max odd palindrome co tam tai i
rec, p, tmp, ans, n, i, p1, p2 : longint;
function min(a, b : longint) : longint; inline;
begin
if a < b then min := a else min := b;
end;
BEGIN
assign(input, inp); reset(input);
assign(output, out); rewrite(output);
FillChar(a, sizeof(a), '.');
n := -1;
while not EOLN do begin
n += 2;
read(a[n]);
end;
n += 1;
rec := 0;
p := -1;
ans := 0;
for i := 0 to n do begin
if i <= p then
f[i] := min(f[rec shl 1 - i], p - i)
else
f[i] := 0;
while (i - f[i] - 1 >= 0) and (i + f[i] + 1 <= n) do begin
p1 := i - f[i] - 1;
p2 := i + f[i] + 1;
if a[p1] <> a[p2] then break;
f[i] += 1;
end;
tmp := i + f[i];
if i > rec then begin
p := tmp;
rec := i;
end;
ans += (f[i] + 1) shr 1;
end;
writeln(ans);
close(input); close(output);
END.