设备塔
Description
有一个
N
*
Data Constraint
N
,
Solution
将网格图复制一份并右移,使得新的网格图的第一列与旧的网格图的第M列相邻,复制后原网格图的每一个位置对应着新网格图的一个位置。若某次操作后(设本次操作的格子为
A
),
Code(Pascal)
label 123;
var
wz:array[1..8,1..2] of longint=
((-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1));
f:array[0..18000000] of longint;
bz:array[-5500..18050000] of boolean;
n,m,j,k,i,l,b1,b2,bj,jl,f1,f2,x,y,ans:longint;
q1,q2:array[0..8] of longint;
function gf(o:longint):longint;
begin
if f[o]=o then exit(o);
f[o]:=gf(f[o]); exit(f[o]);
end;
function ft(a,b:longint):longint;
begin
b:=b mod (2*m); if b=0 then b:=2*m;
exit((a-1)*2*m+b);
end;
begin
readln(n,m,k);
bj:=n*m*2;
for i:=1 to n*m*2 do f[i]:=i;
for i:=1 to k do
begin
readln(x,y);
b1:=(x-1)*2*m+y;
b2:=b1+m;
f1:=gf(b1); f2:=gf(b2);
q1[0]:=0; q2[0]:=0;
for l:=1 to 8 do
if (wz[l,1]+x>0) and (wz[l,1]+x<=n) and
bz[ft(wz[l,1]+x,wz[l,2]+y+2*m)] then
begin
j:=ft(wz[l,1]+x,wz[l,2]+y+2*m);
inc(q1[0]);
q1[q1[0]]:=gf(j);
end;
for l:=1 to 8 do
if (wz[l,1]+x>0) and (wz[l,1]+x<=n) and
bz[ft(wz[l,1]+x,wz[l,2]+y+3*m)] then
begin
j:=ft(wz[l,1]+x,wz[l,2]+y+3*m);
inc(q2[0]);
q2[q2[0]]:=gf(j);
end;
for l:=1 to q1[0] do
for j:=1 to q2[0] do
if q1[l]=q2[j] then goto 123;
inc(ans);
for l:=1 to q1[0] do f[q1[l]]:=f1;
for l:=1 to q2[0] do f[q2[l]]:=f2;
bz[b1]:=true; bz[b2]:=true;
123:
end;
writeln(ans);
end.