1052: [HAOI2007]覆盖问题

Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2053  Solved: 959 [Submit][Status][Discuss]

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

HINT

100%的数据,N<=20000

用一个最小矩形框住所有点,L*L的矩形一定放在4角之一。

枚举第一个放的位置,去掉已覆盖的,从新画最小矩形。

再枚举第二个放的位置,去掉后判断剩下的点能否用一个L*L的矩形覆盖。

二分L。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n;
struct data {
int x,y;
}a[];
int vis[];
int x1=,y1=,x2=-,y2=-;
void cut(int x,int y,int l) {
for(int i=;i<=n;i++) if(a[i].x<=x+l&&a[i].x>=x&&a[i].y<=y+l&&a[i].y>=y) vis[i]=;
}
void solve(int f,int l) {
if(f==) {
int x=,y=;
for(int i=;i<=n;i++) {
if(vis[i]) continue;
x=min(x,a[i].x);y=min(y,a[i].y);
}
cut(x,y,l);
}
if(f==) {
int x=,y=-;
for(int i=;i<=n;i++) {
if(vis[i]) continue;
x=min(x,a[i].x);y=max(y,a[i].y);
}
cut(x,y-l,l);
}
if(f==) {
int x=-,y=-;
for(int i=;i<=n;i++) {
if(vis[i]) continue;
x=max(x,a[i].x);y=max(y,a[i].y);
}
cut(x-l,y-l,l);
}
if(f==) {
int x=-,y=;
for(int i=;i<=n;i++) {
if(vis[i]) continue;
x=max(x,a[i].x);y=min(y,a[i].y);
}
cut(x-l,y,l);
}
}
bool check(int l) {
for(int i=;i<=;i++) {
for(int j=;j<=;j++) {
memset(vis,,sizeof(vis));
solve(i,l);solve(j,l);
int xx1=,yy1=,xx2=-,yy2=-;
for(int i=;i<=n;i++) {
if(vis[i])continue;
xx1=min(xx1,a[i].x);xx2=max(xx2,a[i].x);
yy1=min(yy1,a[i].y);yy2=max(yy2,a[i].y);
}
if(xx2-l<=xx1&&yy2-l<=yy1) return ;
}
}
return ;
}
int main() {
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
int l=,r=;
while(l<=r) {
int mid=(l+r)>>;
if(check(mid)) r=mid-;
else l=mid+;
}
printf("%d",l);
}

[BZOJ1052][HAOI2007]覆盖问题 二分+贪心的更多相关文章

  1. 【BZOJ1052】覆盖问题(贪心)

    [BZOJ1052]覆盖问题(贪心) 题面 BZOJ 洛谷 题解 这题好神仙啊. 很明显可以看出来要二分一个边长. 那么如何\(check\)呢? 我们把所有点用一个最小矩形覆盖, 那么必定每个边界上 ...

  2. bzoj1052覆盖问题(二分+贪心)

    1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2446  Solved: 1131[Submit][Stat ...

  3. bzoj1052 [HAOI2007]覆盖问题 - 贪心

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

  4. bzoj1052: [HAOI2007]覆盖问题(二分+构造)

    貌似又写出了常数挺优(至少不劣)的代码>v< 930+人AC #49 写了个O(nlogn)貌似比一些人O(n)还快2333333 这题还是先二分答案,check比较麻烦 显然正方形一定以 ...

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

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

  6. [bzoj1052] [HAOI2007]覆盖问题

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

  7. 【BZOJ1052】 [HAOI2007]覆盖问题

    BZOJ1052 [HAOI2007]覆盖问题 前言 小清新思维题. 最近肯定需要一些思维题挽救我这种碰到题目只会模板的菜鸡. 这题腾空出世? Solution 考虑一下我们二分答案怎么做? 首先转换 ...

  8. BZOJ_1052_[HAOI2007]_覆盖问题_(二分+贪心)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1052 网格图,给出\(n\)个点,要求用3个边长相同的正方形覆盖所有点,求最小边长. 分析 显 ...

  9. 洛谷 P2218 [HAOI2007]覆盖问题 解题报告

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

随机推荐

  1. Ubuntu14.0.4系统如何获取root权限

    Ubuntu14.0.4系统如何获取root权限 | 浏览:9684 | 更新:2014-08-21 10:38 7 分步阅读 本文主要讲解如何简单实用命令获取root权限 工具/原料 Ubuntu1 ...

  2. Java课程目录

    Java课程目录 1 年前 大家收藏一下这篇文章,这是所有课程的目录. 第一周: 第一课:进制及计算机表示 第二课:进制习题课,进一步介绍进制的知识 第三节课:Java语言的品味(一),通过stati ...

  3. Velocity 语法详解

    Velocity是基于Java的模板引擎,它允许页面设计者引用Java中定义的方法.页面设计者和Java开发者能够同时使用MVC的模式开发网站,这样网页设计者能够把精力放在页面的设计上,程序员也可以把 ...

  4. Python 3基础教程2-打印语句和字符串

    本文介绍Python 3中的打印语句和字符串使用,具体练习请看下面的demo.py print ('Hello Python 3!') """文本讲打印语句和字符串打印语 ...

  5. Pytest框架介绍

    Pytest框架介绍.安装 pytest是python测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,功能更强大 pytest特征 1:断言提示信 ...

  6. XML转译字符

    &(逻辑与) & <(小于) < >(大于) > "(双引号) " '(单引号) &apos; [/size]

  7. [g2o]C++图优化库

    g2o以图模型表达上述最小二乘问题:比较适合解决SLAM问题 http://openslam.org http://wiki.ros.org/g2o

  8. 删除maven仓库中的lastUpdate文件

    使用idea时导入hibernate 5.1.0的jar包,然后发现本地仓库中找不到该版本的jar 然后手贱 alt+enter 发现提示 update maven indices 然后以为更新就会好 ...

  9. 第十三篇:HTML

    本篇内容 选择器 属性 一. 选择器 1.id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式. id 选择器以 "#" 来定义. <!DOCTY ...

  10. JS DOM对象与jQuery对象的转换

    JS转jQuery // 直接用$()来包裹 如同$(this) $(document) var jsObj = document.getElementById('test'); var jquery ...