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.