Description

某人在山上种了N棵小树苗。冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小树遮起来。我们不妨将山建立一个平面直角坐标系,设第i棵小树的坐标为(Xi,Yi),3个L*L的正方形的边要求平行与坐标轴,一个点如果在正方形的边界上,也算作被覆盖。当然,我们希望塑料薄膜面积越小越好,即求L最小值。
Input

第一行有一个正整数N,表示有多少棵树。接下来有N行,第i+1行有2个整数Xi,Yi,表示第i棵树的坐标,保证不会有2个树的坐标相同。
Output

一行,输出最小的L值。
Sample Input
4
0 1
0 -1
1 0
-1 0

Sample Output
1
数据范围
100%的数据,-1,000,000,000<=Xi,Yi<=1,000,000,000
30%的数据,N<=100
50%的数据,N<=2000
100%的数据,N<=20000

可以想到,二分答案,然后判断正确性

先用一个大矩形覆盖整个图,第一个正方形一定在这个大矩形的四个角上

然后删掉被覆盖的点,继续做,最后一个正方形就直接判断就行了

 const
maxn=;
inf=;
type
point=record
x,y:longint;
end;
var
a:array[..maxn]of point;
flag:array[..maxn]of longint;
n,l,r,mid:longint; procedure init;
var
i:longint;
begin
read(n);
for i:= to n do
with a[i] do
read(x,y);
end; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; function try(x:longint):boolean;
var
maxx,maxy,minx,miny,i:longint;
begin
maxx:=-inf;
maxy:=-inf;
minx:=inf;
miny:=inf;
for i:= to n do
if flag[i]= then
begin
maxx:=max(maxx,a[i].x);
maxy:=max(maxy,a[i].y);
minx:=min(minx,a[i].x);
miny:=min(miny,a[i].y);
end;
if x= then
if (maxx-minx<=mid) and (maxy-miny<=mid) then exit(true)
else exit(false)
else
begin
for i:= to n do
if (a[i].x<=minx+mid) and (a[i].y<=miny+mid) then inc(flag[i]);
if try(x+) then exit(true);
for i:= to n do
if (a[i].x<=minx+mid) and (a[i].y<=miny+mid) then dec(flag[i]);
for i:= to n do
if (a[i].x<=minx+mid) and (a[i].y>=maxy-mid) then inc(flag[i]);
if try(x+) then exit(true);
for i:= to n do
if (a[i].x<=minx+mid) and (a[i].y>=maxy-mid) then dec(flag[i]);
for i:= to n do
if (a[i].x>=maxx-mid) and (a[i].y<=miny+mid) then inc(flag[i]);
if try(x+) then exit(true);
for i:= to n do
if (a[i].x>=maxx-mid) and (a[i].y<=miny+mid) then dec(flag[i]);
for i:= to n do
if (a[i].x>=maxx-mid) and (a[i].y>=maxy-mid) then inc(flag[i]);
if try(x+) then exit(true);
for i:= to n do
if (a[i].x>=maxx-mid) and (a[i].y>=maxy-mid) then dec(flag[i]);
exit(false);
end;
end; procedure work;
var
i:longint;
begin
l:=;
r:=inf*;
while l<>r do
begin
mid:=(l+r)>>;
for i:= to n do
flag[i]:=;
if try() then r:=mid
else l:=mid+;
end;
write(l);
end; begin
init;
work;
end.

1052: [HAOI2007]覆盖问题 - BZOJ的更多相关文章

  1. BZOJ 1052: [HAOI2007]覆盖问题

    BZOJ 1052: [HAOI2007]覆盖问题 题意:给定平面上横纵坐标在-1e9~1e9内的20000个整数点的坐标,用三个大小相同边平行于坐标轴的正方形覆盖(在边界上的也算),问正方形的边长最 ...

  2. 【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)

    1052: [HAOI2007]覆盖问题 Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄 膜把这些小树遮盖起来,经过一番长久的 ...

  3. 【BZOJ】1052: [HAOI2007]覆盖问题

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1052 大概自己YY了个贪心然后过了... 二分答案,考虑如何check: 找到一个最小的矩 ...

  4. 【BZOJ】1052: [HAOI2007]覆盖问题(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1052 首先膜拜题解orz,表示只能想到二分... 贪心就是每一次找到一个最小的能包围所有点的矩阵,然 ...

  5. AC日记——[HAOI2007]覆盖问题 bzoj 1052

    1052 思路: 二分答案: 二分可能的长度: 然后递归判断长度是否可行: 先求出刚好覆盖所有点的矩形: 可行的第一个正方形在矩形的一个角上: 枚举四个角上的正方形,然后删去点: 删去一个正方形后,递 ...

  6. [BZOJ 1052][HAOI2007]覆盖问题(二分答案)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1052 分析: 挺有想法的一道题,先二分答案ans,主要是判断的问题. 首先可以弄出把所 ...

  7. BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS

    标题效果:特定n点.涵盖所有的点与同方三面.斧头要求方垂直边界,最小平方的需求方长值 最大值至少.答案是很明显的二分法 但验证是一个问题 考虑仅仅有三个正方形,故用一个最小矩形覆盖这三个正方形时至少有 ...

  8. 【以前的空间】bzoj 1052 [HAOI2007]覆盖问题

    这道题的思路挺简单的……就是可以证明如果要覆盖一个区域内的点,那么一定有一个正方形在这“区域内的点所围成的最大矩形的四个角中的一个”(不要吐槽很多的“的”……),对于长度r是否可以覆盖整个区域内的点, ...

  9. [BZOJ1052][HAOI2007]覆盖问题 二分+贪心

    1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2053  Solved: 959 [Submit][Sta ...

随机推荐

  1. 核心概念 —— 门面(Facades)

    1.简介 门面为应用的服务容器中的绑定类提供了一个"静态"接口.Laravel 内置了很多门面,你可能在不知道的情况下正在使用它们.Laravel 的门面作为服务容器中的底层类的& ...

  2. Java Concurrency - synchronized 关键字

    当有多个线程竞争共享资源时,对资源的访问顺序敏感,则可能造成数据不一致.为了保证共享资源不被多个线程同时访问,则需要将竞争共享资源的代码置于临界区,临界区保证在同一时间内最多只能有一个线程执行该代码段 ...

  3. Wireshark - 观察 ARP 地址解析过程

    下面使用 Wireshark 分析 ARP 的工作过程.试验的机器:发送者机器(IP 地址:10.21.28.47,MAC 地址:68:f7:28:0f:32:2e)下文称为 HOSTA:目标机器(I ...

  4. Newtonsoft.Json.dll序列化为json,null值自动过滤

    var jSetting = new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}; var json = ...

  5. 关于微信response_type参数错误

    可能出现问题的几个原因: 1.正确的2.0auth的地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=1%&redire ...

  6. namenode无法启动(namenode格式化失败)

    格式化namenode root@node04 bin]# sudo -u hdfs hdfs namenode –format 16/11/14 10:56:51 INFO namenode.Nam ...

  7. hive 未初始化元数据库报错

    启动hive-metastore和hive-server2 用beeline连接hive报错 [root@node04 hive]# beeline Beeline version 0.13.1-cd ...

  8. Android之进度条1

    第一种方法(比较简单): package com.example.dialogdemo; import java.util.Random; import android.app.Activity; i ...

  9. ios开发:OC对象的内存分析

    最近要开始准备找实习单位了,做做笔试题,看看各位大神的面试经历,发现自己要学习的东西真的还有很多,虽然也做过几个的项目,但是真正拿过笔试题一看,才发现自己对基础这方面的东西,确实有点忽视了,所以最近开 ...

  10. 利用图层的mask属性裁剪图形

    需求如上图. 代码如下 //充值 UIButton *rechargeButton = [[UIButton alloc] initWithFrame:CGRectMake(, , , )]; [re ...