中山培训 2016.7.9

来源:互联网 发布:淘宝最受欢迎的产品 编辑:程序博客网 时间:2024/04/27 18:48

Description

  为了监视他的N (1 <= N <= 50,000)头奶牛,Farmer John购买了新的监视系统。第i头奶牛位置在(x_i,y_i),坐标为整数,范围0..1,000,000,000。任意两头奶牛的位置不同。 

FJ的监视系统有三个摄像头,每个摄像头只能监视一条水平线或者垂直线上的所有奶牛。请计算如果FJ安装好这三个摄像头,能否监视所有的N头奶牛。也就是说,计算N头奶牛的位置,是否可以被三条直线“覆盖”,直线必须是水平线或垂直线。

Input

  第1行:一个整数N。 

第2..N+1行:第i+1行包含空格隔开的整数x_i 和y_i,给定第i头奶牛的位置。

Output

第1行:如果使用三个摄像头,能监视所有的N头奶牛,请输出1。否则,输出0。  

Sample Input

6

1 7

0 0

1 2

2 0

1 4

3 4

Sample Output

1

 

打暴力,对于每个点,都只有横竖两种情况,暴力就好。

 

type

 arr=array[0..50000] of boolean;

var

 b:arr;

 x,y:array[0..50000] of longint;

 n,i:longint;

procedure dfs(d,x1,y1,num:longint;b:arr);

 vari,t,s:longint;

    c:arr;

  begin

     ifn+1=num then

     begin

      writeln(1);

      halt;

     end;

    ifd>=4 then exit;

 c:=b; t:=0; s:=num;

   fori:=1 to n do

    begin

     if(x[i]=x1) and b[i] then

     begin

      b[i]:=false;

      s:=s+1;

     end;

     if (b[i]=true) and (t=0) then t:=i;

    end;

   b[t]:=false;

   s:=s+1;

   dfs(d+1,x[t],y[t],s,b);

   b[t]:=true;

  b:=c;

 c:=b; t:=0; s:=num;

   fori:=1 to n do

    begin

     if(y[i]=y1) and b[i] then

     begin

      b[i]:=false;

      s:=s+1;

     end;

     if(b[i]=true) and (t=0) then t:=i;

    end;

   s:=s+1;

    b[t]:=false;

   dfs(d+1,x[t],y[t],s,b);

   b[t]:=true;

 end;

begin

 readln(n);

 fori:=1 to n do

  readln(x[i],y[i]);

 fori:=2 to n do

 b[i]:=true;

 dfs(1,x[1],y[1],1,b);

 writeln(0);

end.

 

0 0
原创粉丝点击