比赛 NOIP2008集训模拟1 评测结果 ATAAAAATTT
题目名称 血色叛徒 最终得分 60
用户昵称 E.M.B.E.R 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2008-11-10 09:05:00
显示代码纯文本
program EmberAsh;
var
f:array[0..1000,0..1000]of longint;//矩阵
bx,by:array[1..100000]of longint;//领主
ax,ay:array[1..100000]of longint;//感染源
i,j,k,m,n,a,b,vv,time,x,y,a1,head,tail:longint;
fin,fout:text;

BEGIN
assign(fin,'crusade.in');reset(fin);
assign(fout,'crusade.out');rewrite(fout);
readln(fin,n,m,a,b);
for i:=0 to n do
  for j:=0 to m do
    f[i,j]:=-1;//初始化
for i:=1 to a do
  begin
  readln(fin,ax[i],ay[i]);
  f[ax[i],ay[i]]:=0;//感染源
  end;
vv:=0;//矩阵被感染人数为a
for i:=1 to b do
  begin
  readln(fin,bx[i],by[i]);
  if f[bx[i],by[i]]=0 then
    inc(vv)
    else
    f[bx[i],by[i]]:=-3;//领主
  end;
time:=0;
head:=1;tail:=a;
while vv<b do
  begin
  inc(time);
  a1:=tail;
  for i:=head to a do
    begin
    x:=ax[i];y:=ay[i];
    if ((f[x,y+1]=-1)or(f[x,y+1]=-3))and(y+1<=m) then
      begin
      if f[x,y+1]=-3 then inc(vv);
      f[x,y+1]:=time;
      inc(a);
      ax[a]:=x;ay[a]:=y+1;
      end;//1
    if ((f[x+1,y]=-1)or(f[x+1,y]=-3))and(x+1<=n) then
      begin
      if f[x+1,y]=-3 then inc(vv);
      f[x+1,y]:=time;
      inc(a);
      ax[a]:=x+1;ay[a]:=y;
      end;//2
    if ((f[x,y-1]=-1)or(f[x,y-1]=-3))and(y-1>0) then
      begin
      if f[x,y-1]=-3 then inc(vv);
      f[x,y-1]:=time;
      inc(a);
      ax[a]:=x;ay[a]:=y-1;
      end;//3
    if ((f[x-1,y]=-1)or(f[x-1,y]=-3))and(x-1>0) then
      begin
      if f[x-1,y]=-3 then inc(vv);
      f[x-1,y]:=time;
      inc(a);
      ax[a]:=x-1;ay[a]:=y;
      end;//4
    end;
  head:=a1;
  end;//while
for i:=1 to b do
  writeln(fout,f[bx[i],by[i]]);
close(fin);close(fout);
END.