二分判定 覆盖问题 BZOJ 1052
//二分判定 覆盖问题 BZOJ 1052
// 首先确定一个最小矩阵包围所有点,则最优正方形的一个角一定与矩形一个角重合。
// 然后枚举每个角,再解决子问题 #include <bits/stdc++.h>
using namespace std;
#define LL long long
typedef pair<int,int> pii;
const int inf = 1e9;
const int MOD =;
const int N =;
#define clc(a,b) memset(a,b,sizeof(a))
const double eps = 1e-;
void fre() {freopen("in.txt","r",stdin);}
void freout() {freopen("out.txt","w",stdout);}
inline int read() {int x=,f=;char ch=getchar();while(ch>''||ch<'') {if(ch=='-') f=-; ch=getchar();}while(ch>=''&&ch<='') {x=x*+ch-'';ch=getchar();}return x*f;} struct node{
int x[],y[];
int num;
}a,b;
int n,mid; void solve2(node &a,int x1,int y1,int x2,int y2){
int cnt=;
for(int i=;i<a.num;i++){
if(a.x[i]<x1||a.x[i]>x2||a.y[i]>y2||a.y[i]<y1){
a.x[cnt]=a.x[i];
a.y[cnt]=a.y[i];
cnt++;
}
}
a.num=cnt;
}
void solve(node &a,int f){
int x1=inf,x2=-inf,y1=inf,y2=-inf;
for(int i=;i<a.num;i++){
x1=min(x1,a.x[i]);
x2=max(x2,a.x[i]);
y1=min(y1,a.y[i]);
y2=max(y2,a.y[i]);
}
if(f==) solve2(a,x1,y1,x1+mid,y1+mid);
if(f==) solve2(a,x2-mid,y1,x2,y1+mid);
if(f==) solve2(a,x1,y2-mid,x1+mid,y2);
if(f==) solve2(a,x2-mid,y2-mid,x2,y2);
}
bool check(){
for(int s=;s<=;s++){
for(int t=;t<=;t++){
b.num=a.num;
for(int i=;i<b.num;i++){
b.x[i]=a.x[i],b.y[i]=a.y[i];
}
solve(b,s),solve(b,t);
int x1=inf,x2=-inf,y1=inf,y2=-inf;
for(int i=;i<b.num;i++){
x1=min(x1,b.x[i]);
x2=max(x2,b.x[i]);
y1=min(y1,b.y[i]);
y2=max(y2,b.y[i]);
}
if(x2-x1<=mid&&y2-y1<=mid) return true;
}
}
return false;
}
int main(){
n=read();
for(int i=;i<n;i++) a.x[i]=read(),a.y[i]=read();
a.num=n;
int l=,r=inf;
while(l<=r){
mid=(l+r)>>;
if(check()) r=mid-;
else l=mid+;
}
printf("%d\n",l);
return ;
}
二分判定 覆盖问题 BZOJ 1052的更多相关文章
- AC日记——[HAOI2007]覆盖问题 bzoj 1052
1052 思路: 二分答案: 二分可能的长度: 然后递归判断长度是否可行: 先求出刚好覆盖所有点的矩形: 可行的第一个正方形在矩形的一个角上: 枚举四个角上的正方形,然后删去点: 删去一个正方形后,递 ...
- BZOJ 1052: [HAOI2007]覆盖问题
BZOJ 1052: [HAOI2007]覆盖问题 题意:给定平面上横纵坐标在-1e9~1e9内的20000个整数点的坐标,用三个大小相同边平行于坐标轴的正方形覆盖(在边界上的也算),问正方形的边长最 ...
- [BZOJ 1052][HAOI2007]覆盖问题(二分答案)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1052 分析: 挺有想法的一道题,先二分答案ans,主要是判断的问题. 首先可以弄出把所 ...
- BZOJ 1052 覆盖问题
Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小 ...
- 1052: [HAOI2007]覆盖问题 - BZOJ
Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小 ...
- [BZOJ]1052 覆盖问题(HAOI2007)
三矩形覆盖问题啊……不过听说FJOI还出过双圆覆盖问题? Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来, ...
- 【以前的空间】bzoj 1052 [HAOI2007]覆盖问题
这道题的思路挺简单的……就是可以证明如果要覆盖一个区域内的点,那么一定有一个正方形在这“区域内的点所围成的最大矩形的四个角中的一个”(不要吐槽很多的“的”……),对于长度r是否可以覆盖整个区域内的点, ...
- 【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)
1052: [HAOI2007]覆盖问题 Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄 膜把这些小树遮盖起来,经过一番长久的 ...
- BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS
标题效果:特定n点.涵盖所有的点与同方三面.斧头要求方垂直边界,最小平方的需求方长值 最大值至少.答案是很明显的二分法 但验证是一个问题 考虑仅仅有三个正方形,故用一个最小矩形覆盖这三个正方形时至少有 ...
随机推荐
- 资源-Java:Java资源列表
ylbtech-资源-Java:Java资源列表 1. 开发软件返回顶部 1.Eclipse https://www.eclipse.org/ 2.IntelliJ IDEA https://www. ...
- laravel请求处理管道例子
例子: <?php interface Middleware{ public static function handle (Closure $next);} class VerifyCsrfT ...
- PAT甲级——A1120 Friend Numbers【20】
Two integers are called "friend numbers" if they share the same sum of their digits, and t ...
- PAT甲级——A1109 Group Photo【25】
Formation is very important when taking a group photo. Given the rules of forming K rows with Npeopl ...
- KVM热添加技术
1.KVM热添加的种类 硬盘.网卡.内存.cpu 2.KVM热添加硬盘 1.在宿主机上创建硬盘 qemu-img create -f qcow2 /opt/web02_add01.qcow2 10G ...
- python3爬虫lxml模块的安装
1:在下载lxml之前,要先查看python的版本信息, 在CMD命令行输入python 再输入import pip; print(pip.pep425tags.get_supported()) -- ...
- 【CF888G】Xor-MST
题目 也不是很知道为什么这道题要和某\(B\)姓算法扯上关系 首先有一个非常显然基于那个\(B\)姓算法的做法,每次启发式合并\(trie\)即可,复杂度是\(O(n\ logn\ loga_i)\) ...
- springboot整合mybatis进行跨库查询
业务场景: 当一个公司大了之后就会将各种业务进行分开,最简单的就是例如:公司的机构表,那么就会将他们分成开来,那么就会在一个实例中, 如果要获取相关信息就会去关联这张表进行关联查询 从而导致了跨库关联 ...
- [WPF自定义控件库] 让Form在加载后自动获得焦点
原文:[WPF自定义控件库] 让Form在加载后自动获得焦点 1. 需求 加载后让第一个输入框或者焦点是个很基本的功能,典型的如"登录"对话框.一般来说"登录" ...
- marquee标签(跑马灯效果)