比赛 |
NOIP2008集训模拟1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
血色叛徒 |
最终得分 |
100 |
用户昵称 |
辨机ZN |
运行时间 |
0.000 s |
代码语言 |
Pascal |
内存使用 |
0.00 MiB |
提交时间 |
2008-11-10 10:38:27 |
显示代码纯文本
program ex(f1,f2);
type
zn=array [0..505,0..505] of boolean;
ka=array [1..501,1..501] of longint;
fa=array [0..250001] of longint;
da=record
x,y:integer;
end;
la=array [1..250050] of da;
var
flag,flag2:zn;
d:ka;
c:fa;
a:la;
f1,f2:text;
i,j,k,m,p,l,ans,tot,xx,yy,n1,n2,x1,y1:longint;
head,tail,wei:longint;
procedure bfs(left,right:longint);
var
i,j,k,p:longint;
begin
for i:=head to tail do
begin
if flag2[a[i].x,a[i].y] then
begin
inc(tot);
c[d[a[i].x,a[i].y]]:=ans;
end;
if (a[i].x-1>=1)and(flag[a[i].x-1,a[i].y]=false) then
begin
flag[a[i].x-1,a[i].y]:=true;
inc(wei);
a[wei].x:=a[i].x-1; a[wei].y:=a[i].y;
end;
if (a[i].y-1>=1)and(flag[a[i].x,a[i].y-1]=false) then
begin
flag[a[i].x,a[i].y-1]:=true;
inc(wei);
a[wei].x:=a[i].x; a[wei].y:=a[i].y-1;
end;
if (a[i].x+1<=xx)and(flag[a[i].x+1,a[i].y]=false) then
begin
flag[a[i].x+1,a[i].y]:=true;
inc(wei);
a[wei].x:=a[i].x+1; a[wei].y:=a[i].y;
end;
if (a[i].y+1<=yy)and(flag[a[i].x,a[i].y+1]=false) then
begin
flag[a[i].x,a[i].y+1]:=true;
inc(wei);
a[wei].x:=a[i].x; a[wei].y:=a[i].y+1;
end;
end;
end;
begin
assign(f1,'crusade.in'); reset(f1);
assign(f2,'crusade.out'); rewrite(f2);
readln(f1,xx,yy,n1,n2);
tail:=0;
for i:=1 to n1 do
begin
readln(f1,x1,y1);
flag[x1,y1]:=true;
inc(tail);
a[tail].x:=x1; a[tail].y:=y1;
end;
for i:=1 to n2 do
begin
readln(f1,x1,y1);
flag2[x1,y1]:=true;
d[x1,y1]:=i;
end;
head:=1; wei:=tail; tot:=0; ans:=0;
while tot<n2 do
begin
bfs(head,tail);
inc(ans);
head:=tail+1;
tail:=wei;
end;
for i:=1 to n2 do
writeln(f2,c[i]);
close(f1);
close(f2);
end.