1052: [HAOI2007]覆盖问题

Description

某人在山上种了N棵小树苗。冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄
膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小树遮起来。我们不妨将山建
立一个平面直角坐标系,设第i棵小树的坐标为(Xi,Yi),3个L*L的正方形的边要求平行与坐标轴,一个点如果在
正方形的边界上,也算作被覆盖。当然,我们希望塑料薄膜面积越小越好,即求L最小值。

Input

第一行有一个正整数N,表示有多少棵树。接下来有N行,第i+1行有2个整数Xi,Yi,表示第i棵树的坐标,保证
不会有2个树的坐标相同。

Output

  一行,输出最小的L值。

Sample Input

4
0 1
0 -1
1 0
-1 0

Sample Output

1

HINT

100%的数据,N<=20000

Source

【分析】

  为什么黄学长称之为贪心。。?不懂。。

  首先我们用一个最小的矩形把所有点框住(这个很容易求吧?),

  如果答案的正方形边长等于这个矩形的宽,那么肯定有两个正方形是推到两边的,就是至少有一个正方形的顶点是矩形的顶点。

  如果正方形边长小于宽,因为矩形每条边至少有一个点,所以一定有一个正方形覆盖了矩形两条边,那么这个至少也有一个正方形的顶点是矩形的顶点。

  大于宽就不用说了吧?

  那么我们先二分答案,然后就枚举矩形的四个角,把覆盖的点删掉,递归做子问题就可以了。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 #define Maxn 20010
 8 #define INF 0xfffffff
 9
10 int mymin(int x,int y) {return x<y?x:y;}
11 int mymax(int x,int y) {return x>y?x:y;}
12
13 struct node
14 {
15     int x,y;
16     int p;
17 }t[Maxn];
18
19 int n,tot;
20
21 void change(int x,int y,int nw,int L)
22 {
23     for(int i=1;i<=n;i++) if(t[i].x>=x&&t[i].y>=y&&t[i].p==0)
24     {
25         if(t[i].x-x>L||t[i].y-y>L) continue;
26         t[i].p=nw;tot--;
27     }
28 }
29
30 void change2(int nw)
31 {
32     for(int i=1;i<=n;i++) if(t[i].p==nw)
33     {
34         t[i].p=0;
35         tot++;
36     }
37 }
38
39 bool check(int L,int nw)
40 {
41     if(tot==0) return 1;
42     int x1=INF,x2=-INF,y1=INF,y2=-INF;
43     for(int i=1;i<=n;i++) if(t[i].p==0)
44     {
45         x1=mymin(x1,t[i].x);x2=mymax(x2,t[i].x);
46         y1=mymin(y1,t[i].y);y2=mymax(y2,t[i].y);
47     }
48     if(nw==1) return mymax(x2-x1,y2-y1)<=L;
49     int nx,ny;
50     bool ok=0;
51     nx=x1,ny=y1;change(nx,ny,nw,L);
52     if(check(L,nw-1)) ok=1;change2(nw);
53     if(ok) return 1;
54
55     nx=x1,ny=y2-L;change(nx,ny,nw,L);
56     if(check(L,nw-1)) ok=1;change2(nw);
57     if(ok) return 1;
58
59     nx=x2-L,ny=y1;change(nx,ny,nw,L);
60     if(check(L,nw-1)) ok=1;change2(nw);
61     if(ok) return 1;
62
63     nx=x2-L,ny=y2-L;change(nx,ny,nw,L);
64     if(check(L,nw-1)) ok=1;change2(nw);
65     if(ok) return 1;
66     return 0;
67 }
68
69 int main()
70 {
71     scanf("%d",&n);
72     for(int i=1;i<=n;i++)
73     {
74         scanf("%d%d",&t[i].x,&t[i].y);
75         t[i].p=0;
76     }
77     int l=1,r=INF;
78         tot=n;
79     while(l<r)
80     {
81         int mid=(l+r)>>1;
82         if(check(mid,3)) r=mid;
83         else l=mid+1;
84     }
85     printf("%d\n",l);
86     return 0;
87 }

View Code

2017-02-22 14:07:58

转载于:https://www.cnblogs.com/Konjakmoyu/p/6428623.html

【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)相关推荐

  1. BZOJ 1124 [POI2008]枪战Maf 贪心+乱搞

    题意:略. 方法:贪心+乱搞. 解析: 今天做的题里面最难的了- 分连通块进行考虑. 一个连通块最多死多少呢? 一个点 -> 死一个 一个环 -> 死环上点个数-1个 一个环加上内向树 - ...

  2. bzoj 1052: [HAOI2007]覆盖问题(二分+贪心)

    1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2028  Solved: 950 [Submit][Sta ...

  3. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  4. 【BZOJ】 2049 SDOI洞穴探险 【乱搞】

    不知怎么回事我的电脑上BZOJ挂了,鞠大神的oj也挂了..... 本来要用LCT,但书上说乱搞就不T,我之前却T了,于是我感叹BZOJ数据质量真好...然后就没有然后了 直到今天我又看到一个神犇说,乱 ...

  5. Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...

  6. 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞

    3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 367  Solved: 159 [Submit][Status ...

  7. hash进阶:使用字符串hash乱搞的姿势

    前言 此文主要介绍hash的各种乱搞方法,hash入门请参照我之前这篇文章 不好意思hash真的可以为所欲为 在开头先放一下题表(其实就是我题解中的hash题目qwq) 查询子串hash值 必备的入门 ...

  8. 揭秘刘安和兄弟连不是骗子吗,手法如此传销,培训机构竟利用网络营销上市 现在互联网这么大,娱乐界乱搞,教育界还乱搞,如今泛媒体时代,人人都是KOL,每个人都是意见领袖,一人一个自媒体号,人人都可以发飙

    揭秘刘安和兄弟连不是骗子吗,手法如此传销,培训机构竟利用网络营销上市 现在互联网这么大,娱乐界乱搞,教育界还乱搞,如今泛媒体时代,人人都是KOL,每个人都是意见领袖,一人一个自媒体号,人人都可以发飙, ...

  9. 【BZOJ5288】【HNOI2018】游戏(乱搞?)

    题面 BZOJ 洛谷 题面自己到洛谷上看把 题解 考场上乱搞拿到了 90 90分,简直不敢相信. 回家把代码再交了一份直接就 AC AC了??? O(n2) O(n^2)的做法应该很容易想 对于每个点 ...

最新文章

  1. 你,保持童心;我,帮你保持童颜
  2. java中的volatile和synchronized
  3. Docker-Centos7安装Docker CE 及在Docker CE中安装RabbitMQ
  4. nginx 读取文件_Nginx的提升php上传下载
  5. 布隆过滤器 redis_redis布隆过滤器
  6. python创建目录保存文件
  7. 某公司PIX 520防火墙系统和NAT的实施
  8. shellcode编写技巧
  9. Markdown数学公式、特殊字符、上下标、积分、分式/根式 亲测有效
  10. 报名国电没有计算机二级,想进入国电,捧起“铁饭碗”?没问题,这几个专业助你成功...
  11. rgbdslam_v2编译过程中引起的needed by错误
  12. Vray for UE4 (一)
  13. 谷歌地图地名显示繁体字_谷歌地图卫星地图怎么取消地名还有路线
  14. 浪曦struts2学习笔记2
  15. 鸟哥Linux私房菜 第五章 文件权限与目录配置
  16. 用质谱法定义 HLA-II 配体处理和结合规则可增强癌症表位预测
  17. 【计算机毕业设计】小型OA系统设计与实现Springboot
  18. 微信公众号迁移公证、迁移申请函办理方法
  19. 暑期2020“大咖说开源” | 陈莉君:Linux从入门到深入内核有多远
  20. erlang httpc

热门文章

  1. 使用 JNA 模拟C语言结构体的完整源代码
  2. 盒子模型的各种高度记录
  3. JSP中9个隐含对象
  4. python3 tkinter 实现凯撒密码GUI界面
  5. 一只青蛙跳向三个台阶_Java版剑指offer编程题第9题--变态跳台阶
  6. ubuntu下c 调用java_ubuntu下使用JNI Java调用C++的例子
  7. 企业研发人员配备比例_高新企业研发人员占比多少
  8. Python入门--for循环
  9. java 随机生成图_java – 如何生成随机图?
  10. 操作系统—内存的连续分配管理方式