记录编号 74472 评测结果 AAAAAAAAAA
题目名称 [福州培训2010] 01迷宫 最终得分 100
用户昵称 Gravatar苏轼 是否通过 通过
代码语言 Pascal 运行时间 0.290 s
提交时间 2013-10-25 17:00:27 内存使用 16.38 MiB
显示代码纯文本
Program sl;
  type
    re=record
      x,y:longint;
       end;
  const
    maxn=1000000;
  var
    n,m,i,j,x,y,l,r,p,s:longint;
    a:array[1..1000,1..1000]of boolean;
    k:array[1..1000,1..1000]of longint;
    w:array[1..maxn]of longint;
    q:array[1..maxn]of re;
    c:char;
  begin
    assign(input,'maze01.in');
    assign(output,'maze01.out');
    reset(input);
    rewrite(output);
    readln(n,m);
    for i:=1 to n do
      begin
        for j:=1 to n do
          begin
            read(c);
            if c='1' then a[i,j]:=true;
          end;
        readln;
      end;
    p:=0;
    for i:=1 to n do
      for j:=1 to n do
        begin
          if k[i,j]>0 then continue;
          l:=0; r:=1;
          q[1].x:=i; q[1].y:=j;
          inc(p);
          k[i,j]:=p;
          s:=1;
          while l<r do
            begin
              if l=maxn then l:=1
              else inc(l);
              x:=q[l].x;y:=q[l].y;
              if (x>1)and(k[x-1,y]=0)and(a[x-1,y]xor a[x,y])
                then begin
                       inc(s);
                       k[x-1,y]:=p;
                       if r=maxn then r:=1
                       else inc(r);
                       q[r].x:=x-1;q[r].y:=y;
                     end;
              if (y>1)and(k[x,y-1]=0)and(a[x,y-1]xor a[x,y])
                then begin
                       inc(s);
                       k[x,y-1]:=p;
                       if r=maxn then r:=1
                       else inc(r);
                       q[r].x:=x;q[r].y:=y-1;
                     end;
              if (x<n)and(k[x+1,y]=0)and(a[x+1,y]xor a[x,y])
                then begin
                       inc(s);
                       k[x+1,y]:=p;
                       if r=maxn then r:=1
                       else inc(r);
                       q[r].x:=x+1;q[r].y:=y;
                     end;
              if (y<n)and(k[x,y+1]=0)and(a[x,y+1]xor a[x,y])
                then begin
                       inc(s);
                       k[x,y+1]:=p;
                       if r=maxn then r:=1
                       else inc(r);
                       q[r].x:=x;q[r].y:=y+1;
                     end;
            end;
          w[p]:=s;
        end;
    for i:= 1 to m do
      begin
        read(x,y);
        writeln(w[k[x,y]]);
      end;
    close(input);
    close(output);
  end.