bzoj1052 9.20考试 第二题 覆盖问题
1052: [HAOI2007]覆盖问题
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 2004 Solved: 937
[Submit][Status][Discuss]
Description
Input
Output
一行,输出最小的L值。
Sample Input
0 1
0 -1
1 0
-1 0
Sample Output
HINT
100%的数据,N<=20000
这道题当时一看还以为是一道几何题,就先放着最后打然后就华丽丽的爆零了。
最后正解并不是我当初第一反应的几何,但确实是我当时第二反应——二分答案,exciting……
我们可以通过一个无法用语言描述的证明可知至少有一个正方形是位于最小矩形的一个角上的。因为一共就三个正方形,所以我们dfs每个正方形位于当前最小矩形的四个角的情况就好了,那么时间复杂度就是O(log (2*10^9)*n*64)轻松搞掉。
- #include<iostream>
- #include<cstdlib>
- #include<cstdio>
- #include<cstring>
- #include<queue>
- #include<algorithm>
- #include<cmath>
- #include<map>
- #include<vector>
- #define N 20005
- using namespace std;
- int n,xx,nx,xy,ny;
- bool fw[N];
- struct no
- {
- int x,y;
- }node[N];
- bool dfs(long long L,int x,int sum)
- {
- if(sum==n)return ;
- if(x==)
- return ;
- int xxx=-0x7fffffff,nnx=0x7fffffff,xxy=-0x7fffffff,nny=0x7fffffff;
- if(x==)
- xxx=xx,nnx=nx,xxy=xy,nny=ny;
- else
- {
- for(int i=;i<=n;i++)
- {
- if(fw[i])continue;
- if(node[i].x>xxx) xxx=node[i].x;
- if(node[i].x<nnx) nnx=node[i].x;
- if(node[i].y>xxy) xxy=node[i].y;
- if(node[i].y<nny) nny=node[i].y;
- }
- }
- bool b[N];
- int t=sum;
- memcpy(b,fw,sizeof(fw));
- for(int i=;i<=n;i++)
- {
- if(!fw[i]&&node[i].x<=nnx+L&&node[i].y<=nny+L)
- fw[i]=,t++;
- }
- if(dfs(L,x+,t)) return ;
- memcpy(fw,b,sizeof(b));
- t=sum;
- for(int i=;i<=n;i++)
- {
- if(!fw[i]&&node[i].x<=nnx+L&&node[i].y>=xxy-L)
- fw[i]=,t++;
- }
- if(dfs(L,x+,t)) return ;
- memcpy(fw,b,sizeof(b));
- t=sum;
- for(int i=;i<=n;i++)
- {
- if(!fw[i]&&node[i].x>=xxx-L&&node[i].y<=nny+L)
- fw[i]=,t++;
- }
- if(dfs(L,x+,t)) return ;
- t=sum;
- memcpy(fw,b,sizeof(b));
- for(int i=;i<=n;i++)
- {
- if(!fw[i]&&node[i].x>=xxx-L&&node[i].y>=xxy-L)
- fw[i]=,t++;
- }
- if(dfs(L,x+,t)) return ;
- memcpy(fw,b,sizeof(b));
- return ;
- }
- int main()
- {
- scanf("%d",&n);
- xx=-0x7fffffff,nx=0x7fffffff,ny=0x7fffffff,xy=-0x7fffffff;
- for(int i=;i<=n;i++)
- {
- scanf("%d%d",&node[i].x,&node[i].y);
- if(node[i].x>xx) xx=node[i].x;
- if(node[i].x<nx) nx=node[i].x;
- if(node[i].y>xy) xy=node[i].y;
- if(node[i].y<ny) ny=node[i].y;
- fw[i]=;
- }
- long long li=,ri=max(xy-ny,xx-nx);
- while(li<=ri)
- {
- long long mid=(li+ri)>>;
- memset(fw,,sizeof(fw));
- if(dfs(mid,,))ri=mid-;
- else li=mid+;
- }
- printf("%lld\n",ri+);
- return ;
- }
bzoj1052 9.20考试 第二题 覆盖问题的更多相关文章
- 9.18考试 第二题Dinner题解
当时初步感觉是一个类似动归或者贪心的神题,然而由于本题已经给出顺序,贪心貌似并没有什么道理,所以放弃贪心.然后又由于这是一个环的问题,我想到了“合并石子”那种环转链的思路,然后就是一个O(n^2*m) ...
- 2017 五一 清北学堂 Day1模拟考试结题报告
预计分数:100+50+50 实际分数:5+50+100 =.= 多重背包 (backpack.cpp/c/pas) (1s/256M) 题目描述 提供一个背包,它最多能负载重量为W的物品. 现在给出 ...
- CSDN挑战编程——《金色十月线上编程比赛第二题:解密》
金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...
- NOIP2005-普及组复赛-第二题-校门外的树
题目描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- 【LOJ#6066】「2017 山东一轮集训 Day3」第二题(哈希,二分)
[LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么 ...
- RHCSA考试真题
2018年 RHCSA考试真题... ------------ 考前需要做的基础 破解root密码 KVM虚拟机与VM虚拟机 主机名:station.domain1.example.comIP地址:1 ...
- 【BZOJ4928】第二题 树hash+倍增
[BZOJ4928]第二题 Description 对于一棵有根树,定义一个点u的k-子树为u的子树中距离u不超过k的部分. 注意,假如u的子树中不存在距离u为k的点,则u的k-子树是不存在的. 定义 ...
- 中国MOOC_面向对象程序设计——Java语言_期末考试编程题_1细胞自动机
期末考试编程题 返回 这是期末考试的编程题 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成 ...
- Java蓝桥杯02——第二题集锦:生日蜡烛、星期一、方格计数、猴子分香蕉
第二题 生日蜡烛(结果填空) 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填 ...
随机推荐
- 前端开发常用PhotoShop快捷键整理(更新中)
图片来源 UI提供的psd图 印屏幕:PrScrn SysRq(键盘按键) 浏览器(插件)获取 常用的快捷键: 新建 Ctrl + N 取消选框 Ctrl + D 反选 Ctrl + shift + ...
- 使用NEWSEQUENTIALID解决GUID聚集索引问题
原文:使用NEWSEQUENTIALID解决GUID聚集索引问题 UNIQUEIDENTIFIER做主键(Primary Key)是一件很方便的事情,在数据合并等操作中有不可替代的优势 但是由于普通的 ...
- LINQ查询表达式---------let子句
LINQ查询表达式---------let子句 let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. class P ...
- Android零基础入门第63节:过时但仍值得学习的选项卡TabHost
原文:Android零基础入门第63节:过时但仍值得学习的选项卡TabHost 由于前几天参加一个学习培训活动,几乎每天都要从早晨7点到晚上一两点,没有什么时间来分享,实在抱歉中间断更了几天.从今天开 ...
- 百度 Echarts 地图表 js 引用路径
使用地图表格,除了需echarts,还需zrender,自行下载JS文件: 目标,做成这样的效果:http://echarts.baidu.com/doc/example/map3.html ...
- RtlAdjustPrivilege进程提权,权限ID对照表
SeCreateTokenPrivilege 0x2 SeAssignPrimaryTokenPrivilege 0x3 SeLockMemoryPrivilege ...
- QT多个UI文件加入一个项目
这样可在多个UI界面上进行分部开发.避免都在一个UI下太凌乱…… 在网上找了一些资料,很少有介绍这方面的,以及类似这样项目的源码. 看 一些基本控件的使用时,想到了一种方法:使用gridLayout控 ...
- iOS11中iOS处理GIF图片的方式
GIF 五部走如下 : 1 从相册中取出GIF图的Data 2 通过腾讯的IM发送Gif图 3 展示GIF图 4 GIF图URL缓存机制 5 将展示的GIF图存到相册中 一 从相册中 ...
- 原生Js封装的产品图片360度展示
挺简单的一段程序,但是效果不错: 1.把需要展示的36张图片先预加载到浏览器缓存里 2.给展示图片的div添加方法 3.通过鼠标左右移动的像素转换图片 在线效果预览:http://jsfiddle.n ...
- UbuntuServer添加软件源列表
要使用Ubuntu前,我们一般都要先做好工具!特别是对于安装这一块~~~~ 1.配置前,先做个配置文件的备份: $sudo cp /etc/apt/sources.list /etc/apt/sour ...