中山培训 2016.7.9
2016-07-11 21:00
267 查看
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.
为了监视他的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.
相关文章推荐
- iOS中按钮点击事件处理方式
- shell学习笔记
- linux中断分层技术分析
- Nexus安装和配置
- python 调用数据库
- HDU 4778 Gems Fight!【博弈+DP】
- [从hzwer神犇那翻到的模拟赛题] 合唱队形
- 24、事件对象
- Android手机应用接口大全
- Ubuntu14.04如何安装32位兼容库,即ia32-libs
- inline-block-inline-block的简单区别
- UVA 1635-Irrelevant Elements(唯一分解定理)
- 修改Openwrt的MAC的几种方法
- 《第一行代码》读书笔记(第三章,第四章)
- HDU2824 The Euler function
- android进度条
- scala学习笔记(9): 语法续
- (4.2.32.3)android热修复之Andfix方式:Andfix的初步使用
- HDU 1203 I NEED A OFFER!
- 十进制转换为其他进制数