BZOJ 1052: [HAOI2007]覆盖问题

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

思路:构造一个覆盖所有点的矩形,正方形的端点即为矩形的一角,这样枚举四个角的两个正方形,二分最大长度,看剩下的点是否能被第三个正方形覆盖。
ps:构造矩形的思想是看了题解才想到的。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define rep(i,n) for((i) = 0;i < n;i++)
struct Point{
int x[], y[],top;
}a;
const int inf = ;
void cut(Point &a,int x1,int y1,int x2,int y2)
{
Point b;
b.top = a.top;
for(int k = ;k <= a.top;k++)
b.x[k] = a.x[k],b.y[k] = a.y[k];
a.top = ;
for(int i = ;i <= b.top;i++)
if(b.x[i] < x1 || b.x[i] > x2 || b.y[i] < y1 || b.y[i] > y2){
a.x[++a.top] = b.x[i];
a.y[a.top] = b.y[i];
}
}
void solve(Point &a,int id,int mid)
{
int x1 = inf ,x2 = -inf ,y1 = inf ,y2 = -inf;
for(int k = ;k <= a.top;k++){
x1 = min(x1,a.x[k]);x2 = max(x2,a.x[k]);
y1 = min(y1,a.y[k]);y2 = max(y2,a.y[k]);
}
if(id == )
cut(a,x1,y1,x1+mid,y1+mid);
if(id == )
cut(a,x1,y2-mid,x1+mid,y2);
if(id == )
cut(a,x2-mid,y1,x2,y1+mid);
if(id == )
cut(a,x2-mid,y2-mid,x2,y2);
}
bool judge(int mid)
{
Point b;
for(int i = ;i <= ;i++){
for(int j = ;j <= ;j++){
b.top = a.top;
for(int k = ;k <= b.top;k++)
b.x[k] = a.x[k],b.y[k] = a.y[k];
solve(b,i,mid);
solve(b,j,mid); //可以只是一个正方形;
int x1 = inf ,x2 = -inf ,y1 = inf ,y2 = -inf;
for(int k = ;k <= b.top;k++){
x1 = min(x1,b.x[k]);x2 = max(x2,b.x[k]);
y1 = min(y1,b.y[k]);y2 = max(y2,b.y[k]);
}
if(x2 - x1 <= mid && y2 - y1 <= mid) return true;
}
}
return false;
}
int main()
{
int n,xx,yy;
cin>>n;
a.top = n;
for(int i = ;i <= n;i++){
scanf("%d%d",&xx,&yy);
a.x[i] = xx;
a.y[i] = yy;
}
int l = ,r = inf,ans;
while(l <= r){
int mid = (l + r) >> ;
if(judge(mid))
ans = mid,r = mid - ;
else l = mid + ;
}
printf("%d\n",ans);
return ;
}

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

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

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

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

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

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

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

  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. 理解 MEF

    1.它解决什么问题? 考虑下面的需求,甲程序员对外暴露接口,内部提供实现.乙程序员使用甲提供的接口,根据面向接口编程的原则,乙关联一个接口类型的引用.正常情况下,乙要使用甲的实现,必须实例化一个具体对 ...

  2. ThinkPHP3.1新特性:命名范围

    概述 命名范围功能,给模型操作提供了一系列的(连贯操作)封装,让你更方便的查询和操作数据.我们来具体了解下这一用法. 定义属性 要使用命名范围功能,主要涉及到模型类的_scope属性定义和scope连 ...

  3. Installing the PHP/MongoDB extension on Mac OSX 10.8

    Installing PHP/MongoDB extension is a two steps task on OSX: Install the autoconf tool required for ...

  4. C# - 系统类 - 系统接口

    ICloneable接口 ns:System 此接口只定义了一个名为Clone的方法 该方法返回一个Object对象 表示调用该方法的对象的拷贝版 IComparable接口 ns:System 此接 ...

  5. js渐变显示渐变消失

    以下是渐变的js代码(表示多余三行的要隐藏,点击"more"显示剩下的,点击“less”要逐渐隐藏): function showAccomplishmentTableRow(){ ...

  6. Spring + JDK Timer Scheduler Example--reference

    http://www.mkyong.com/spring/spring-jdk-timer-scheduler-example/ In this example, you will use Sprin ...

  7. 100 high quality blogs from java developers

    This list collects 100 high quality blogs from Java developers from all over the world. Some of thes ...

  8. [转]SharePoint 2010 Download as Zip File Custom Ribbon Action

    在SharePoint 2010文档库中,结合单选框,在Ribbon中提供了批量处理文档的功能,比如,批量删除.批量签出.批量签入等,但是,很遗憾,没有提供批量下载,默认的只能一个个下载,当选择多个文 ...

  9. 深入分析 Java 中的中文编码问题 (文章来自网络)

    许令波,developerWorks 中国网站最佳作者,现就职于淘宝网,是一名 Java 开发工程师.对大型互联网架构设计颇感兴趣,喜欢钻研开源框架的设计原理.有时间将学到的知识整理成文章,也喜欢记录 ...

  10. STORM 免费且开源的WebSerivce测试工具

    一.名称 STORM 是一款免费且开源的WebSerivce测试工具 二.使用方式 1.发布自己的webservice服务 例如:http://www.webxml.com.cn/WebService ...