Why WA?
Posted by
GeGe 30 Mar 2003 20:37
I have WA. Why?
const MaxN = 33;
OneSqure = 9;
type TArr = array[0 .. MaxN + 1, 0 .. MaxN + 1] of Byte;
var A : TArr;
C : array[0 .. MaxN + 1, 0 .. MaxN + 1] of Boolean;
N, Count : Integer;
procedure Init;
var ch : Char;
i, j : Byte;
begin
Read(N);
fillchar(A, SizeOf(A), 0);
for i := 0 to N + 1 do
begin
A[i, 0] := 1;
A[0, i] := 1;
A[i, N + 1] := 1;
A[N + 1, i] := 1;
end;
A[N + 1, N] := 0;
A[N, N + 1] := 0;
A[1, 0] := 0;
A[0, 1] := 0;
for i := 1 to N do
for j := 1 to N do
begin
Read(ch);
while Not(ch in ['.', '#']) and Not(EOF) do Read(ch);
if ch = '#' then A[i, j] := 1;
end;
end;
procedure Rec(const pi, pj : Byte);
begin
if (A[pi, pj] = 1) or C[pi, pj] or
(pi < 1) or (pj < 1) or (pi > N) or (pj > N) then exit;
C[pi, pj] := true;
Rec(pi + 1, pj);
Rec(pi, pj + 1);
Rec(pi - 1, pj);
Rec(pi, pj - 1);
end;
procedure Solve;
var i, j : Integer;
begin
Rec(1, 1);
Count := 0;
for i := 1 to N do
for j := 1 to N do
if C[i, j] then
begin
if A[i, j - 1] = 1 then Inc(Count);
if A[i - 1, j] = 1 then Inc(Count);
if A[i, j + 1] = 1 then Inc(Count);
if A[i + 1, j] = 1 then Inc(Count);
end;
end;
begin
Init;
Solve;
WriteLn(Count*OneSqure);
end.