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]覆盖问题的更多相关文章
- [BZOJ 1052][HAOI2007]覆盖问题(二分答案)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1052 分析: 挺有想法的一道题,先二分答案ans,主要是判断的问题. 首先可以弄出把所 ...
- BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS
标题效果:特定n点.涵盖所有的点与同方三面.斧头要求方垂直边界,最小平方的需求方长值 最大值至少.答案是很明显的二分法 但验证是一个问题 考虑仅仅有三个正方形,故用一个最小矩形覆盖这三个正方形时至少有 ...
- 【以前的空间】bzoj 1052 [HAOI2007]覆盖问题
这道题的思路挺简单的……就是可以证明如果要覆盖一个区域内的点,那么一定有一个正方形在这“区域内的点所围成的最大矩形的四个角中的一个”(不要吐槽很多的“的”……),对于长度r是否可以覆盖整个区域内的点, ...
- 【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,表示只能想到二分... 贪心就是每一次找到一个最小的能包围所有点的矩阵,然 ...
- 1052: [HAOI2007]覆盖问题 - BZOJ
Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小 ...
- [BZOJ1052][HAOI2007]覆盖问题 二分+贪心
1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2053 Solved: 959 [Submit][Sta ...
- 二分判定 覆盖问题 BZOJ 1052
//二分判定 覆盖问题 BZOJ 1052 // 首先确定一个最小矩阵包围所有点,则最优正方形的一个角一定与矩形一个角重合. // 然后枚举每个角,再解决子问题 #include <bits/s ...
随机推荐
- 关于模拟器不能运行项目问题:Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
我有一个习惯,当做完某一项功能时就想试试运行效果.所以一个程序完成前会运行无数遍.但是有时会出现不能运行的问题,并且这个问题不是来自项目的错误,显示器显示如下错误: [2013-08-31 08:45 ...
- 将默认的Netbeans中文版设置为英文界面
问题:从官网下载的Netbeans不论是中文版还是英文版默认的操作界面都是中文,并且字体十分恶心. 原因:Netbeans 根据本地的操作系统自动设置界面语言,并且没有提供更改的功能. 目标效果:把N ...
- 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据
瀑布流加载显示数据,在当下已经用的很普遍,尤其是我们在做网上商城时,在产品列表页面已经被普遍使用. 对于实现瀑布流布局的解决方案主要有以下两种方式: 1.对每一条显示数据使用绝对定位+浮动的方式,这样 ...
- 什么是aop?
这个命题其实是讲了的,但是之前没有做,发现一些面试会问到,结合自己之前的学习经历.简单把这个问题描述一下. aop是跟oop相对应的一个概念.分别是aspect oriented programmin ...
- mongodb环境部署
mongodb 环境部署 1.环境说明 安装软件:mongodb-linux-x86_64-.tgz 软件安装位置:/usr/local/mongodb 数据存放位置:/var/mongodb/dat ...
- SVN修改已提交版本的日志
在工作中一直是使用svn进行项目的版本控制的,有时候由于提交匆忙,或是忘了添加Log,或是Log内容写的有错误.今日遇到此类情况,想要在查看项目的日志时添加log或是修改log内容,遇到如下错误:Re ...
- .net+easyui系列--Pagination 分页
使用 JS 创建分页 <div id="pat" style="background:#efefef;border:1px solid #ccc;"> ...
- 循环json里面的数据
{{each company as cvalue i}} {{each value.Goods as gvalue i}} {{each gvalue.SKU as value i}} ...
- MVC中的统一验证机制
using MvcApplication2.Models;using System;using System.Collections.Generic;using System.ComponentMod ...
- c语言学习之基础知识点介绍(十九):内存操作函数
一.malloc函数 /* 首先需要导入头文件 #include <stdlib.h> malloc void* malloc(n); n是字节大小 开辟堆空间,开辟的字节数以n为准 返回 ...