BZOJ_1052_[HAOI2007]_覆盖问题_(二分+贪心)
描述
http://www.lydsy.com/JudgeOnline/problem.php?id=1052
网格图,给出\(n\)个点,要求用3个边长相同的正方形覆盖所有点,求最小边长.
分析
显然是二分+判断可行性.
如何判断可行性呢?我们注意到是3个正方形.为什么是3个?
我们先找出覆盖所有点的最小距形,那么距形的四条边必须有正方形贴着,而又是3个正方形,所以至少要有1个正方形同时贴着两条边.
1.贴着的边相对
这样的话三个正方形都同时贴着相对的两条边,比如是上下两条边,那么贴着左边的那个正方形就贴着3条边,在距形的一角.
2.贴着的边相邻
这样的话这个正方形就在距形的一角.
所以我们递归的把正方形放在距形的一角,然后去掉已经覆盖了的点,继续放正方形即可.
#include <bits/stdc++.h>
#define fst first
#define scd second
using namespace std;
inline int read(int &x){x=;int k=;char c;for(c=getchar();c<''||c>'';c=getchar())if(c=='-')k=-;for(;c>=''&&c<='';c=getchar())x=x*+c-'';return x*=k;} typedef pair <int,int> P;
const int maxn=+,INF=0x7fffffff;
int n,ml,mr,mu,md;
P a[maxn];
bool vis[maxn];
bool dfs(int x,int t){
if(t==) return max(md-mu,mr-ml)<=x;
P b[][];
b[][]=P(ml,mu),b[][]=P(ml+x,mu+x);
b[][]=P(ml,md-x),b[][]=P(ml+x,md);
b[][]=P(mr-x,mu),b[][]=P(mr,mu+x);
b[][]=P(mr-x,md-x),b[][]=P(mr,md);
for(int i=;i<;i++){
int tl=ml,tr=mr,tu=mu,td=md;
int tmp[maxn];
for(int j=;j<=n;j++) tmp[j]=vis[j];
for(int j=;j<=n;j++)
if(a[j].fst>=b[i][].fst&&a[j].fst<=b[i][].fst&&a[j].scd>=b[i][].scd&&a[j].scd<=b[i][].scd)
vis[j]=true;
mu=ml=INF; mr=md=-INF;
for(int j=;j<=n;j++)if(!vis[j]){
mu=min(mu,a[j].scd); md=max(md,a[j].scd);
ml=min(ml,a[j].fst); mr=max(mr,a[j].fst);
}
bool flag=dfs(x,t+);
ml=tl,mr=tr,mu=tu,md=td;
for(int j=;j<=n;j++) vis[j]=tmp[j];
if(flag) return true;
}
return false;
}
inline void solve(){
int l=,r=max(md-mu,mr-ml);
while(l<r){
for(int i=;i<=n;i++)if(vis[i]) puts("!");
int mid=l+(r-l)/;
if(dfs(mid,)) r=mid;
else l=mid+;
}
printf("%d\n",l);
}
inline void init(){
read(n);
mu=ml=INF,mr=md=-INF;
for(int i=;i<=n;i++){
read(a[i].fst), read(a[i].scd);
ml=min(ml,a[i].fst); mr=max(mr,a[i].fst);
mu=min(mu,a[i].scd); md=max(md,a[i].scd);
}
}
int main(){
init();
solve();
return ;
}
1052: [HAOI2007]覆盖问题
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1540 Solved: 705
[Submit][Status][Discuss]
Description
Input
Output
一行,输出最小的L值。
Sample Input
0 1
0 -1
1 0
-1 0
Sample Output
HINT
100%的数据,N<=20000
Source
BZOJ_1052_[HAOI2007]_覆盖问题_(二分+贪心)的更多相关文章
- 【BZOJ】【1052】【HAOI2007】覆盖问题
二分+贪心 首先二分L,转化成判定问题…… 但是判定不会判啊QAQ orz hzwer,用一个最小的矩形框住所有点后,直接往矩形的角上摆正方形……第二个用同样的方法摆,最后判一下剩下的能否被完全覆盖 ...
- 用户管理_组管理_权限管理.ziw
2017年1月10日, 星期二 用户管理_组管理_权限管理 用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage ...
- BZOJ 1108: [POI2007]天然气管道Gaz 性质分析_小结论_巧妙
Description Mary试图控制成都的天然气市场.专家已经标示出了最好的天然气井和中转站在成都的地图.现在需要将中转 站和天然气井连接起来.每个中转站必须被连接到正好一个钻油井,反之亦然. M ...
- $bzoj2067\ szn$ 二分+贪心
正解:二分+贪心 解题报告: 传送门$QwQ$ 题目大意就说有一棵树,然后要用若干条线覆盖所有边且不能重叠.问最少要用几条线,在用线最少的前提下最长的线最短是多长. 昂首先最少用多少条线这个还是蛮$e ...
- Spring_MVC_教程_快速入门_深入分析
Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...
- 基于samba实现win7与linux之间共享文件_阳仔_新浪博客
基于samba实现win7与linux之间共享文件_阳仔_新浪博客 然后启动samba执行如下指令: /dev/init.d/smb start 至此完成全部配置.
- 浅谈 Underscore.js 中 _.throttle 和 _.debounce 的差异
Underscore.js是一个很精干的库,压缩后只有5.2KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程. 本文仅探讨Underscore.js的两个 ...
- CLOSE-UP FORMALWEAR_意大利进口_2015秋冬_男装发布会_西装图片系列_男装西装设计资料_WeArTrends时尚资讯网_国内最专业的服装设计资讯网站
CLOSE-UP FORMALWEAR_意大利进口_2015秋冬_男装发布会_西装图片系列_男装西装设计资料_WeArTrends时尚资讯网_国内最专业的服装设计资讯网站 CLOSE-UP FORMA ...
随机推荐
- 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- Matlab中unifrnd函数使用解析
1.生成N阶[a,b]均匀分布数组 >> unifrnd(3,5,5,5) ans = 3.8651 4.6677 4.8115 4.3456 4.8560 4.0241 3.4079 3 ...
- Windows ftp 连不上Linux
1.首先检查vsftpd服务器 是否安装 $ rpm -qa | grep vsftpdvsftpd-2.2.2-11.el6.x86_64 2.显示已安装,restart the vsftpd ¥ ...
- spring @resource @ Autowired
Spring中什么时候用@Resource,什么时候用@service 当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类 ...
- Graham's Scan算法
原文链接:http://www.cnblogs.com/devymex/archive/2010/08/09/1795392.html C++/STL实现: #include <algorith ...
- mySql 的基本操作
mysql -uroot -proot show databases; use ltcl_net;show tables; desc tablename; 查看表结构 create table tes ...
- poj 2387 Til the Cows Come Home (最短路,dijkstra模版题)
题目 #define _CRT_SECURE_NO_WARNINGS #include<string.h> #include<stdio.h> #include<math ...
- java基础知识回顾之javaIO类--java序列化和反序列化
/** * * 一:理解序列化反序列化及其应用 * 序列化:把堆内存的对象转化成字节流的过程. * 反序列化:把字节流序列恢复重构成对象的过程. * 对象的序列化的用途:1.把对象的字节序列持久化, ...
- hdu 3441 Rotation
总的来说,这题要2次用到polya定理. 由题目条件A*A=B*B+1,变形为(A-1)*(A+1)=K*B*B; 分别分解A-1和A+1的质因数,在合并在一起. 第一步:搜索B,对B*B的正方形涂色 ...
- poj 3358 Period of an Infinite Binary Expansion
由乘2取整得到分数的小数位,可以找到规律!!! 例如:1/10,2/10,4/10,8/10,16/10,32/10,64/10…… 取整后:1/10,2/10,4/10,8/10,6/10,2/10 ...