1
0
Fork 0
cp/2ndary/12/TP-ThanhHoá-2009/bai5.pas

113 lines
2.0 KiB
Plaintext

uses
sortnfind;
var
f: text;
rect: array of boolean;
mem: array of intar;
m, n: byte;
tmp, i, idx0, idx1: smallint;
function locate(x: smallint): smallint;
var
i: smallint;
begin
for i := 0 to length(mem) - 1 do
if binin(mem[i], x) then
exit(i)
end;
procedure mv(
src: intar;
var dest: intar
);
var
lendest, lensrc, i: smallint;
begin
lendest := length(dest);
lensrc := length(src);
setlength(dest, lendest + lensrc);
for i := 0 to lensrc - 1 do
dest[i + lendest] := src[i];
setlength(src, 0);
qsort(dest)
end;
begin
assign(f, 'BAI5.INP');
reset(f);
readln(f, m, n);
setlength(rect, m * n);
for i := 0 to m * n - 1 do
begin
read(f, tmp);
if tmp = 0 then
rect[i] := true
else
rect[i] := false
end;
close(f);
setlength(mem, 0);
for i := 0 to m * n - 1 do
if rect[i] then
begin
idx0 := -1;
idx1 := -1;
if (i > 0) and rect[i - 1] then
idx0 := locate(i - 1);
if (i >= n) and rect[i - n] then
if idx0 = -1 then
idx0 := locate(i - n)
else
begin
tmp := locate(i - n);
if tmp < idx0 then
begin
idx1 := idx0;
idx0 := tmp
end
else if tmp > idx0 then
idx1 := tmp
end;
if idx0 + idx1 = -2 then
begin
setlength(mem, length(mem) + 1);
setlength(mem[length(mem) - 1], 1);
mem[length(mem) - 1][0] := i;
continue
end;
setlength(mem[idx0], length(mem[idx0]) + 1);
mem[idx0][length(mem[idx0]) - 1] := i;
if idx1 > 0 then
mv(mem[idx1], mem[idx0])
end;
tmp := 0;
for i := 0 to length(mem) - 1 do
if length(mem[i]) > tmp then
tmp := length(mem[i]);
assign(f, 'BAI5.OUT');
rewrite(f);
writeln(f, tmp);
close(f)
end.