未完成题目

来源:互联网 发布:centos 7 安装desktop 编辑:程序博客网 时间:2024/06/05 04:57

广州选拔2014 T3

var

  n,i,j,ans,m,h,l,sum:longint;
  x,y:array[0..100,1..3]of longint;
  a:array[0..50,1..4]of longint;
  p:array[1..101,1..101]of boolean;
  b:array[0..101,0..101,1..4]of boolean;
  f:array[1..4,1..2]of longint=((-1,0),(1,0),(0,1),(0,-1));


procedure qsortx(l,r:longint);
var
  i,j,key:longint;
begin
  if l>r then exit;
  i:=l;j:=r;
  key:=x[(i+j)div 2,1];
  while i<j do
  begin
    while (i<r)and(x[i,1]<key)do inc(i);
    while (l<j)and(x[j,1]>key)do dec(j);
    if i<=j then
    begin
      x[0]:=x[i];x[i]:=x[j];x[j]:=x[0];
      inc(i);dec(j);
    end;
  end;
  qsortx(l,j);
  qsortx(i,r);
end;


procedure qsorty(l,r:longint);
var
  i,j,key:longint;
begin
  if l>r then exit;
  i:=l;j:=r;
  key:=y[(i+j)div 2,1];
  while i<j do
  begin
    while (i<r)and(y[i,1]<key)do inc(i);
    while (l<j)and(y[j,1]>key)do dec(j);
    if i<=j then
    begin
      y[0]:=y[i];y[i]:=y[j];y[j]:=y[0];
      inc(i);dec(j);
    end;
  end;
  qsorty(l,j);
  qsorty(i,r);
end;


procedure dfs(x,y:longint);
var
  i,x1,y1:longint;
begin
  inc(sum);
  p[x,y]:=false;
  for i:=1 to 4 do
  begin
    x1:=x+f[i,1];y1:=y+f[i,2];
    if (x1<1)or(x1>h+1)or(y1<1)or(y1>l+1)then continue;
    if b[x,y,i] and p[x1,y1] then dfs(x1,y1);
  end;
end;


begin
 // assign(input,'regions.in');reset(input);
 // assign(output,'regions.out');rewrite(output);
  readln(n);
  for i:=1 to n do
  begin
    read(x[i,1],y[i,1],x[i+n,1],y[i+n,1]);
    x[i,2]:=i;x[i,3]:=1;y[i,2]:=i;y[i,3]:=2;
    x[i+n,2]:=i;x[i+n,3]:=3;y[i+n,2]:=i;y[i+n,3]:=4;
  end;
  qsortx(1,n*2);
  qsorty(1,n*2);
  x[0,1]:=-1;y[0,1]:=-1;h:=0;l:=0;
  for i:=1 to n*2 do
  begin
    if x[i,1]<>x[i-1,1] then inc(h);
    a[x[i,2],x[i,3]]:=h;
    if y[i,1]<>y[i-1,1] then inc(l);
    a[y[i,2],y[i,3]]:=l;
  end;
  fillchar(b,sizeof(b),true);
  for i:=1 to n do
  begin
    for j:=a[i,1]+1 to a[i,3] do
    begin
      b[j,a[i,2],3]:=false;
      b[j,a[i,2]+1,4]:=false;
      b[j,a[i,4],3]:=false;
      b[j,a[i,4]+1,4]:=false;
    end;
    for j:=a[i,4]+1 to a[i,2] do
    begin
      b[a[i,1],j,2]:=false;
      b[a[i,1]+1,j,1]:=false;
      b[a[i,3],j,2]:=false;
      b[a[i,3]+1,j,1]:=false;
    end;
  end;
  sum:=0;
  fillchar(p,sizeof(p),true);
  while sum<h*l do
  begin
   for i:=1 to h do
     for j:=1 to l do
     if p[i,j] then
     begin
       inc(ans);
       dfs(i,j);
     end;
  end;
  writeln(ans);
 // close(input);
 // close(output);
End.

0 0
原创粉丝点击