bzoj1052覆盖问题(二分+贪心)
1052: [HAOI2007]覆盖问题
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 2446 Solved: 1131
[Submit][Status][Discuss]
Description
Input
Output
一行,输出最小的L值。
Sample Input
0 1
0 -1
1 0
-1 0
Sample Output
HINT
100%的数据,N<=20000
/*
二分答案后怎么覆盖呢
容易想到找最左上角,左下角,右上角,右下角的点搞一搞
就是说先得找个最小矩形把所有点覆盖起来。
然后怎么用三个正方形覆盖所有点呢?
显然必须满足覆盖最外边的点,因此就是要从大矩形四个角入手。
先找一个角放上一个,最优解一定有这个。
然后把它覆盖的点删去,就成了一个子问题。更新大矩形,再放一个。
判断最后剩下的点能不能用最后一个正方形 覆盖即可。
O(nlogn)
*/
#include<bits/stdc++.h> #define inf 1000000001
#define ll long long
#define N 20007 using namespace std;
int n,ans,mid;
struct node{
int x[N],y[N],rest;
}a,b; 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;
} void cut(node &a,int x1,int y1,int x2,int y2)//删点
{
int tot=;
for(int i=;i<=a.rest;i++)
if(a.x[i]<x1||a.x[i]>x2||a.y[i]<y1||a.y[i]>y2)
{
tot++;
a.x[tot]=a.x[i];
a.y[tot]=a.y[i];
}
a.rest=tot;
} void solve(node &a,int opt)//放两个正方形
{
int x1=inf,y1=inf,x2=-inf,y2=-inf;
for(int i=;i<=a.rest;i++)
{
x1=min(a.x[i],x1),x2=max(a.x[i],x2);
y1=min(a.y[i],y1),y2=max(a.y[i],y2);
}
if(opt==) cut(a,x1,y1,x1+mid,y1+mid);
if(opt==) cut(a,x2-mid,y1,x2,y1+mid);
if(opt==) cut(a,x1,y2-mid,x1+mid,y2);
if(opt==) cut(a,x2-mid,y2-mid,x2,y2);
} bool judge()
{
node b;
for(int x=;x<=;x++)
for(int y=;y<=;y++)
{
b.rest=a.rest;
for(int i=;i<=b.rest;i++)
b.x[i]=a.x[i],b.y[i]=a.y[i];
solve(b,x);solve(b,y);
int x1=inf,y1=inf,x2=-inf,y2=-inf;
for(int i=;i<=b.rest;i++)
{
x1=min(b.x[i],x1),x2=max(b.x[i],x2);
y1=min(b.y[i],y1),y2=max(b.y[i],y2);
}
if(x2-x1<=mid&&y2-y1<=mid)return ;//最后一个可以盖住
}
return ;
} int main()
{
n=read();a.rest=n;
for(int i=;i<=a.rest;i++)
a.x[i]=read(),a.y[i]=read();
int l=,r=inf;
while(l<=r)
{
mid=(l+r)>>;
if(judge()) ans=mid,r=mid-;
else l=mid+;
}
printf("%d\n",ans);
return ;
}
bzoj1052覆盖问题(二分+贪心)的更多相关文章
- [BZOJ1052][HAOI2007]覆盖问题 二分+贪心
1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2053 Solved: 959 [Submit][Sta ...
- 【BZOJ1052】覆盖问题(贪心)
[BZOJ1052]覆盖问题(贪心) 题面 BZOJ 洛谷 题解 这题好神仙啊. 很明显可以看出来要二分一个边长. 那么如何\(check\)呢? 我们把所有点用一个最小矩形覆盖, 那么必定每个边界上 ...
- $bzoj2067\ szn$ 二分+贪心
正解:二分+贪心 解题报告: 传送门$QwQ$ 题目大意就说有一棵树,然后要用若干条线覆盖所有边且不能重叠.问最少要用几条线,在用线最少的前提下最长的线最短是多长. 昂首先最少用多少条线这个还是蛮$e ...
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...
- 2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 二分+贪心
/** 题目:2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 链接:http://codeforces.com/gym/101194 题意:给n个木块,堆 ...
- 【bzoj2097】[Usaco2010 Dec]Exercise 奶牛健美操 二分+贪心
题目描述 Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径. ...
- Codeforces_732D_(二分贪心)
D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- CF732D Exams 二分 贪心
思路:二分+贪心 提交次数:10次以上 错因:刚开始以为二分(边界,$+1or-1$)写错了,调了半天,后来才发现是$ck()$写错了.开始只判了最后是否小于零,而应该中间一旦小于零就$return\ ...
- $CF949D\ Curfew$ 二分/贪心
正解:二分/贪心 解题报告: 传送门$QwQ$ 首先这里是二分还是蛮显然的?考虑二分那个最大值,然后先保证一个老师是合法的再看另一个老师那里是否合法就成$QwQ$. 发现不太会搞这个合不合法的所以咕了 ...
随机推荐
- eclipse中自动生成注释
eclipse中自动生成注释 包前缀设置的地方 注释模板设置的地方 Eclipse自动生成方法注释 快捷键 自动生成方法的注释格式,例如 /*** @param str* @return* @thro ...
- struts2开发action 的三种方法以及通配符、路径匹配原则、常量
struts2开发action 的三种方法 1.继承ActionSupport public class UserAction extends ActionSupport { // Action中业务 ...
- readdir() 获取文件类型
readdir()获取文件类型 //// 字符设备文件 type =2, filename207=tty0 crw-rw---- 1 root root 4, 0 04-10 16:28 ...
- Elasticsearch的Java API做类似SQL的group by聚合。
https://www.cnblogs.com/kangoroo/p/8033955.html
- UVA 674_Coin Change
题意: 给定一个数,求用1,5,10,25,50有多少种组合方式. 分析: 简单计数dp,dp[i][j]表示由前i+1个元素组成j的种数,注意dp[i][0]初始化为1,因为一个元素也不选的方法总是 ...
- [bzoj2287][poj Challenge]消失之物_背包dp_容斥原理
消失之物 bzoj-2287 Poj Challenge 题目大意:给定$n$个物品,第$i$个物品的权值为$W_i$.记$Count(x,i)$为第$i$个物品不允许使用的情况下拿到重量为$x$的方 ...
- 选择器的使用(target选择器)
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...
- linux以下安装dnw
[root@embedded secbulk]# make -C /lib/modules/`uname -r`/build M=`pwd` modules make: *** /lib/module ...
- storm ——Understanding the Parallelism of a Storm Topology
http://www.michael-noll.com/blog/2012/10/16/understanding-the-parallelism-of-a-storm-topology/ 这篇文章好 ...
- Skype for Business七大新功能
Lync Server 2013的下一版本号.Skype for Business将于2015年4月正式公布,下面是七大新功能. "呼叫监听"(Call Monitor)--假设你 ...