这道题的思路挺简单的……就是可以证明如果要覆盖一个区域内的点,那么一定有一个正方形在这“区域内的点所围成的最大矩形的四个角中的一个”(不要吐槽很多的“的”……),对于长度r是否可以覆盖整个区域内的点,只需要先枚举第一个矩形在“区域内的点所围成的最大矩形的四个角中的哪一个”,然后再枚举下一个点在“区域内的剩余点所围成的最大矩形的四个角中的哪一个”第三个正方形就直接判断余下的点的最大最小差值是否小于r就行了……再然后就直接二分答案了……然后,注意一种情况,就是出现一个或者两个矩形就可以覆盖完整个区域点的情况(可能是因为我傻×于是就被这里坑了一下)……


type
arr=record
x,y:longint;
end;
var
a:array[..]of arr;
i,j,k,l,r,n,mid,maxx,minx,maxy,miny:longint;
vs:array[..]of longint; procedure find(var x1,x2,y1,y2:longint);
begin
x1:=-maxlongint;
x2:=maxlongint;
y1:=-maxlongint;
y2:=maxlongint;
for i:= to n do if vs[i]= then
begin
if a[i].x>x1 then x1:=a[i].x;
if a[i].x<x2 then x2:=a[i].x;
if a[i].y>y1 then y1:=a[i].y;
if a[i].y<y2 then y2:=a[i].y;
end;
end; function dfs(x,y:longint):boolean;
var
maxx,minx,maxy,miny:longint;
begin
find(maxx,minx,maxy,miny);
if minx=maxlongint then exit(true);
if y= then begin
if (maxx-minx<=x) and (maxy-miny<=x) then exit(true);
exit(false);
end; for i:= to n do
if vs[i]= then
if (minx+x>=a[i].x) and (miny+x>=a[i].y) then vs[i]:=y;
if dfs(x,y+) then exit(true);
for i:= to n do
if vs[i]=y then vs[i]:=; for i:= to n do
if vs[i]= then
if (minx+x>=a[i].x) and (maxy-x<=a[i].y) then vs[i]:=y;
if dfs(x,y+) then exit(true);
for i:= to n do
if vs[i]=y then vs[i]:=; for i:= to n do
if vs[i]= then
if (maxx-x<=a[i].x) and (miny+x>=a[i].y) then vs[i]:=y;
if dfs(x,y+) then exit(true);
for i:= to n do
if vs[i]=y then vs[i]:=; for i:= to n do
if vs[i]= then
if (maxx-x<=a[i].x) and (maxy-x<=a[i].y) then vs[i]:=y;
if dfs(x,y+) then exit(true);
for i:= to n do
if vs[i]=y then vs[i]:=;
exit(false);
end; begin
readln(n);
for i:= to n do
readln(a[i].x,a[i].y);
fillchar(vs,sizeof(vs),);
find(maxx,minx,maxy,miny);
l:=;
if maxx-minx>maxy-miny
then r:=maxx-minx
else r:=maxy-miny;
while l<=r do begin
fillchar(vs,sizeof(vs),);
mid:=(l+r)>>;
if dfs(mid,) then r:=mid-
else l:=mid+;
end;
writeln(l);
readln;
end.

【以前的空间】bzoj 1052 [HAOI2007]覆盖问题的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. 1052: [HAOI2007]覆盖问题 - BZOJ

    Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小 ...

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

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

  9. 二分判定 覆盖问题 BZOJ 1052

    //二分判定 覆盖问题 BZOJ 1052 // 首先确定一个最小矩阵包围所有点,则最优正方形的一个角一定与矩形一个角重合. // 然后枚举每个角,再解决子问题 #include <bits/s ...

随机推荐

  1. 模拟登陆百度以及Selenium 的基本用法

    模拟登陆百度,需要依赖于selenium 模块,调用浏览器,执行python命令 先来说一下这个selenium模块啦...... 本文参考内容来自 Selenium官网 SeleniumPython ...

  2. CentOS 7.2使用tomcat部署jenkins2.130

    一.jenkins介绍 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins可以用于一些测 ...

  3. <cfenv>(fenv.h) _c++11

    头文件 <cfenv>(fenv.h) c++11 浮点环境 这个头文件声明了一系列的函数和宏去访问浮点环境,以及特殊的类型. 浮点环境维护一系列的状态标志(status flags)和具 ...

  4. UE4蓝图小记

    http://www.element3ds.com/forum.php?mod=viewthread&tid=76930&page=1&authorid=104414 http ...

  5. Swift使用AVAudioPlayer来调节游戏的背景音乐大小

    音乐文件的声音大小有时在做为游戏背景音乐时会过大,而如果我们只是简单应用SKAudioNode来加载音乐的话,是无法进行声音大小的调节的,因此我们必须使用更强大的AVAudioPlayer来进行声音大 ...

  6. SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false

    根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s is ...

  7. 【button】 按钮组件说明

    原型: <button size="[default | mini]" type="[primary | default | warn]" plain=& ...

  8. 【scroll-view】 可滚动视图组件说明

    scroll-view 可滚动视图容器 原型: <scroll-view scroll-x="[Boolean]" scroll-y="[Boolean]" ...

  9. leetcode-组合总数III(回溯)

    组合总和 III 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合.  示例 ...

  10. 凸包算法(Graham扫描法)详解

    先说下基础知识,不然不好理解后面的东西 两向量的X乘p1(x1,y1),p2(x2,y2) p1Xp2如果小于零则说明  p1在p2的逆时针方向 如果大于零则说明 p1在p2的顺时针方向 struct ...