NKGUARD - Bảo vệ nông trang
Tác giả: RR
Ngôn ngữ: Pascal
{
PROG: guardian
LANG: PASCAL
ID: invinci3
}
{$R-,Q-}
const
FINP='';
FOUT='';
MAXN=701;
di:array[1..8] of longint=(-1,-1,-1,0,0,1,1,1);
dj:array[1..8] of longint=(-1,0,1,-1,1,-1,0,1);
var
h,xet:array[1..MAXN,1..MAXN] of longint;
qu,qv:array[1..MAXN*MAXN] of longint;
m,n,count,first,last:longint;
procedure inp; inline;
var
f:text;
i,j:longint;
begin
assign(f,FINP); reset(f);
readln(f,m,n);
for i:=1 to m do
begin
for j:=1 to n do read(f,h[i,j]);
readln(f);
end;
close(f);
end;
function check(u,v:longint):boolean; inline;
var
uu,vv,k:longint;
ok:boolean;
begin
first:=1; last:=1;
qu[1]:=u; qv[1]:=v; xet[u,v]:=1;
ok:=true;
while first<=last do
begin
u:=qu[first]; v:=qv[first]; inc(first);
for k:=1 to 8 do
begin
uu:=u+di[k]; vv:=v+dj[k];
if (uu>0) and (vv>0) and (uu<=m) and (vv<=n) then
begin
if h[uu,vv]>h[u,v] then ok:=false;
if (h[uu,vv]=h[u,v]) and (xet[uu,vv]=0) then
begin
inc(last); qu[last]:=uu; qv[last]:=vv;
xet[uu,vv]:=1;
end;
end;
end;
end;
check:=ok;
end;
procedure solve; inline;
var
i,j:longint;
begin
count:=0;
for i:=1 to m do
for j:=1 to n do
if xet[i,j]=0 then
if check(i,j) then inc(count);
end;
procedure ans; inline;
var
f:text;
begin
assign(f,FOUT); rewrite(f);
writeln(f,count);
close(f);
end;
begin
inp;
solve;
ans;
end.