1052: [HAOI2007]覆盖问题 - BZOJ
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的更多相关文章
- BZOJ 1052: [HAOI2007]覆盖问题
BZOJ 1052: [HAOI2007]覆盖问题 题意:给定平面上横纵坐标在-1e9~1e9内的20000个整数点的坐标,用三个大小相同边平行于坐标轴的正方形覆盖(在边界上的也算),问正方形的边长最 ...
- 【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)
1052: [HAOI2007]覆盖问题 Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄 膜把这些小树遮盖起来,经过一番长久的 ...
- 【BZOJ】1052: [HAOI2007]覆盖问题
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1052 大概自己YY了个贪心然后过了... 二分答案,考虑如何check: 找到一个最小的矩 ...
- 【BZOJ】1052: [HAOI2007]覆盖问题(贪心)
http://www.lydsy.com/JudgeOnline/problem.php?id=1052 首先膜拜题解orz,表示只能想到二分... 贪心就是每一次找到一个最小的能包围所有点的矩阵,然 ...
- AC日记——[HAOI2007]覆盖问题 bzoj 1052
1052 思路: 二分答案: 二分可能的长度: 然后递归判断长度是否可行: 先求出刚好覆盖所有点的矩形: 可行的第一个正方形在矩形的一个角上: 枚举四个角上的正方形,然后删去点: 删去一个正方形后,递 ...
- [BZOJ 1052][HAOI2007]覆盖问题(二分答案)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1052 分析: 挺有想法的一道题,先二分答案ans,主要是判断的问题. 首先可以弄出把所 ...
- BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS
标题效果:特定n点.涵盖所有的点与同方三面.斧头要求方垂直边界,最小平方的需求方长值 最大值至少.答案是很明显的二分法 但验证是一个问题 考虑仅仅有三个正方形,故用一个最小矩形覆盖这三个正方形时至少有 ...
- 【以前的空间】bzoj 1052 [HAOI2007]覆盖问题
这道题的思路挺简单的……就是可以证明如果要覆盖一个区域内的点,那么一定有一个正方形在这“区域内的点所围成的最大矩形的四个角中的一个”(不要吐槽很多的“的”……),对于长度r是否可以覆盖整个区域内的点, ...
- [BZOJ1052][HAOI2007]覆盖问题 二分+贪心
1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2053 Solved: 959 [Submit][Sta ...
随机推荐
- Java Concurrency - Concurrent Collections
Data structures are a basic element in programming. Almost every program uses one or more types of d ...
- Unity3D 之暂停和继续的实现
Time.timeScale 时间缩放 当timeScale传递时间1.0时和实时时间一样快.当timeScale传递时间0.5时比实时时间慢一半. 当timeScale传递时间为0时游戏基本上暂停了 ...
- iOS开发--UIKit控件之UISearchBar(搜索栏)
今天因为需求原因,需要用到搜索控件:之前一直没有用到过这个控件,所以去百度了一下,找到一篇可以说很齐全的资料,感谢这位作者. 然而,我并没有找到可以更改字体大小的属性或方法,希望有知道的告诉我一声,谢 ...
- 【知识分享】UIButton setTitle 设置为空 失效
今天开发练习超级猜图,但是碰到了一个奇怪的问题 困扰我一个晚上,低效的夜晚 可恨~ 示例说明1 [button setTitle:@"" forState:UIControlSta ...
- Android Animation学习笔记
原文地址: http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html 关于动画的实现,Android提供了Animation,在And ...
- CodeForces 679B(Bear and Tower of Cubes)
题意:Limak要垒一座由立方体垒成的塔.现有无穷多个不同棱长(a>=1)的立方体.要求:1.塔的体积为X(X<=m).2.在小于X的前提下,每次都选体积最大的砖块.3.在砖块数最多的前提 ...
- nutch安装配置
http://nlp.solutions.asia/?p=180 http://www.promenade.me/archives/146 环境 ubuntu 12.04 sql建表 CREATE D ...
- 找回mysql数据库密码
前提条件:你需要有数据库服务器的权限 1:修改my.ini配置文件 Mysqld:其中的d代表什么? Deamon后台运行的服务程序,增加一行跳过权限验证 2:停止mysql服务运行 3:启动mysq ...
- simple_factory
#include <stdlib.h> #include <iostream> using namespace std; class Product { public: vir ...
- DTcms 扩展字段标签调用
前台模版: 文章列表:{dr[author]} 文章内容{model.fields[author]} 点击数 后台CS文件:model.fields["author"].ToStr ...