当前位置: 首页 > news >正文

BZOJ1052 [HAOI2007]覆盖问题

1052: [HAOI2007]覆盖问题

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2401  Solved: 1101
[Submit][Status][Discuss]

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

 

 很容易想到二分L的长度,但是check合法性很麻烦。容易得出,如果用一个矩形包围所有点,那么长度为L的正方形的最优策略一定是位于矩形的四个角中的其中一个,枚举四个角,然后把位于小正方形内的点全部剔除,就变成了用两个小正方形覆盖所有点的子问题,于是用dfs直到第三层处理完后看是否涵盖所有点即可。

一开始tmp数组和cnt开成了全局变量,导致dfs过程中会不断覆盖之前的值...调了好久

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n;
 4 struct Node{
 5     int x,y;
 6 };
 7 Node a[20050];
 8 int vis[20050];
 9 
10 void cut(int minx,int miny,int maxx,int maxy,int &cnt,int tmp[]){
11     for (int i = 0;i < n;++i){
12         if (a[i].x >= minx && a[i].x <= maxx && a[i].y >= miny && a[i].y <= maxy) {
13             vis[i]++;
14             tmp[cnt++] = i;
15         }
16     }
17 }
18 
19 bool check(int L,int step){
20     if (step == 3) {
21         for (int i = 0;i < n;++i){
22             if (!vis[i]) return false;
23         }
24         return true;
25     }
26     int minx,miny,maxx,maxy;
27     minx = miny = 1e9+7;
28     maxx = maxy = -1e9+7;
29     for (int i = 0;i < n;++i){
30         if (vis[i]) continue;
31         minx = min(minx,a[i].x);
32         miny = min(miny,a[i].y);
33         maxx = max(maxx,a[i].x);
34         maxy = max(maxy,a[i].y);
35     }
36 
37     int cnt = 0,tmp[20050];
38     cut(minx,miny,minx+L,miny+L,cnt,tmp);
39     if (check(L,step+1)) return true;
40     for (int i = 0;i < cnt;++i){
41         vis[tmp[i]]--;
42     }
43 
44     cnt = 0;
45     cut(minx,maxy-L,minx+L,maxy,cnt,tmp);
46     if (check(L,step+1)) return true;
47     for (int i = 0;i < cnt;++i) vis[tmp[i]]--;
48 
49     cnt = 0;
50     cut(maxx-L,maxy-L,maxx,maxy,cnt,tmp);
51     if (check(L,step+1)) return true;
52     for (int i = 0;i < cnt;++i) vis[tmp[i]]--;
53 
54     cnt = 0;
55     cut(maxx-L,miny,maxx,miny+L,cnt,tmp);
56     if (check(L,step+1)) return true;
57     for (int i = 0;i < cnt;++i) vis[tmp[i]]--;
58     return false;
59 }
60 
61 
62 int main(){
63     scanf("%d",&n);
64     for (int i = 0;i < n;++i){
65         scanf("%d%d",&a[i].x,&a[i].y);
66     }
67     int l = 0;
68     int r = 1e9+7;
69     while(l < r){
70         int mid = (l+r) >> 1;
71         memset(vis,0,sizeof(vis));
72         if (check(mid,0)) r = mid;
73         else l = mid+1;
74     }
75     printf("%d\n",l);
76     return 0;
77 }

 

转载于:https://www.cnblogs.com/mizersy/p/9554308.html

相关文章:

  • RabbitMQ消息中介之Python使用
  • Android下的一些命令
  • Xshell连接虚拟机文档教程
  • 2-10 案例4:像素读取写入
  • Python基础之数据类型和变量
  • SpringCloud组件相关
  • 2.进程与程序的关系
  • 【一步一步学习spring】【番外】IOC 设计原理与实现
  • Python 面向对象 2
  • 1344 线型网络
  • 关于mysql严格模式的开启、关闭
  • Jenkins自动化CI CD流水线之5--pipeline
  • 在博客园写了一年博客,收获的不仅仅是写作技能——我能一直保持积极的学习和工作态度...
  • luogu1556 幸福的路
  • Win10安装MySQL5.7.22 解压缩版(手动配置)方法
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 5、React组件事件详解
  • canvas 绘制双线技巧
  • Fabric架构演变之路
  • Java IO学习笔记一
  • Spark RDD学习: aggregate函数
  • yii2中session跨域名的问题
  • 初识 beanstalkd
  • 飞驰在Mesos的涡轮引擎上
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 欢迎参加第二届中国游戏开发者大会
  • 记一次和乔布斯合作最难忘的经历
  • 近期前端发展计划
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 使用common-codec进行md5加密
  • 一个SAP顾问在美国的这些年
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 移动端高清、多屏适配方案
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​【已解决】npm install​卡主不动的情况
  • ​业务双活的数据切换思路设计(下)
  • !!Dom4j 学习笔记
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (pojstep1.1.2)2654(直叙式模拟)
  • (八)Flask之app.route装饰器函数的参数
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一) storm的集群安装与配置
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • .NET CORE Aws S3 使用
  • .net/c# memcached 获取所有缓存键(keys)
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用