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 ...
随机推荐
- cogs 餐巾 461(贪心)
/*虽然这暴力剪了又剪 改了又改 还是初始的20分...*/ #include<iostream> #include<cstdio> #include<cstring&g ...
- [算法练习] UVA-10010-Where's Waldorf?
UVA Online Judge 题目10010 Where's Waldorf? Waldorf在哪? 问题描述: 给出一个m行n列的字符矩阵(),和一个单词列表,在矩阵上匹配每个单词.在矩阵上匹 ...
- 【Knockout】四、绑定上下文
Binding context binding context是一个保存数据的对象,你可以在你的绑定中引用它.当应用绑定的时候,knockout自动创建和管理binding context的继承关系. ...
- Cocos2d-x中自定义粒子系统
除了使用Cocos2d-x的11种内置粒子系统外,我们还可以通过创建ParticleSystemQuad对象,并设置属性实现自定义粒子系统,通过这种方式完全可以实现我们说需要的各种效果的粒子系统.使用 ...
- Quartz 第二课 Jobs and Triggers(官方文档翻译)
The Quartz API IScheduler—与scheduler交互的主要的接口 IJob—这个接口主要定义scheduler执行内容 IJobDetail—用于定义Jobs实例 ITrigg ...
- 委托和事件[delegate and event]_C#
委托和事件: 1. 委托:一个能够表示方法的数据类型:它将方法作为对象封装起来,允许在运行时间接地绑定一个方法调用. 2. 声明委托数据类型: public delegate bool Greate ...
- (转)Facebook内部分享:26个高效工作的小技巧
春节假期马上就要结束了,该收收心进入新一年的工作节奏了~分享 26 个高效工作的小技巧,希望对大家有所帮助~(我发现自己只有最后一条执行得很好,并且堪称完美!) 1.时间常有,时间优先. 2.时间总会 ...
- 【译】 Node.js v0.12的新特性 -- 性能优化
原文: https://strongloop.com/strongblog/performance-node-js-v-0-12-whats-new/ January 21, 2014/in Comm ...
- 使用百度zrender, demo抛砖引玉.
http://www.just.org.cn/zrender/index.html https://github.com/ecomfe/zrender 目录结构: |-project |-dem ...
- js 正则实例
1.匹配url参数 var re = /([^&=]+)=?([^&]*)/g while (r = re.exec("aaa1a=aabbbbbbb")) { a ...