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的? 请填 ...
随机推荐
- .Net Core 中使用PetaPoco ,T4生成模版
话不多说,直接上源码. 1.引用NuGet 2.添加T4 <#@ template debug="true" hostspecific="false" l ...
- Tinyhttpd for Windows(学习型的项目,才500多行代码)
前言 TinyHTTPd是一个开源的简易学习型的HTTP服务器,项目主页在:http://tinyhttpd.sourceforge.net/,源代码下载:https://sourceforge.ne ...
- phpexcel导出超过26列解决方案
原文:phpexcel导出超过26列解决方案 将列的数字序号转成字母使用,代码如下: PHPExcel_Cell::stringFromColumnIndex($i); // 从o,1,2,3,.. ...
- 微信小程序把玩(十三)progress组件
原文:微信小程序把玩(十三)progress组件 进度条描述的是一种加载的状态,比如软件升级下载进度, 视频,图片下载进度- 主要属性: wxml <progress percent=" ...
- asp.net下ueditor上传大容量视频报http请求错误的解决方法
故障现象: 当使用百度编辑器ueditor上传大容量视频或大容量图片的时候,编辑器报“http请求错误”的解决方法详解: 原因分析: 目前很多CMS整合了百度的ueditor编辑器,但是上传稍微大一点 ...
- 声谱预测网络(Tacotron2)
整个特征预测网络是一个带有注意力机制(attention)的seq2seq网络. 编码器-解码器(Encoder-Decoder)结构 在原始的编码器-解码器结构中,编码器(encoder)输入一个序 ...
- Windows 各种计时函数总结(QueryPerformanceCounter可以达到微秒)
本文对Windows平台下常用的计时函数进行总结,包括精度为秒.毫秒.微秒三种精度的5种方法.分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock ...
- jsp中的指令与动作
JSP中的三种命令指令分别是page.include.taglib JSP中的动作元素包括:include.forward.useBean.getProperty.setProperty.plugin ...
- Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL
目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...
- FastDFS结合FastDHT实现文件去重存储
存储文件时,为了节省存储空间,需要实现文件去重,即同一份文件只在服务器上存储一份.一种实现是文件上传后先落到应用服务器上,计算MD5并存储到数据库中,然后决定是否上传存储服务器.这样做的缺点是应用服务 ...