From f97ad3e9e225a288e7a8a53c2ef0acb45a47dbde Mon Sep 17 00:00:00 2001 From: Raphael McSinyx Date: Sat, 19 Nov 2016 19:00:47 +0700 Subject: Thêm đề 12 Thanh Hoá 2008-2009 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "12/TP-ThanhHo\303\241-2009/bai5.pas" | 112 ++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 "12/TP-ThanhHo\303\241-2009/bai5.pas" (limited to '12/TP-ThanhHoá-2009/bai5.pas') diff --git "a/12/TP-ThanhHo\303\241-2009/bai5.pas" "b/12/TP-ThanhHo\303\241-2009/bai5.pas" new file mode 100644 index 0000000..867b9d2 --- /dev/null +++ "b/12/TP-ThanhHo\303\241-2009/bai5.pas" @@ -0,0 +1,112 @@ +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. -- cgit 1.4.1