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的? 请填 ...
随机推荐
- 深度学习概述教程--Deep Learning Overview
引言 深度学习,即Deep Learning,是一种学习算法(Learning algorithm),亦是人工智能领域的一个重要分支.从快速发展到实际应用,短短几年时间里, ...
- 零元学Expression Blend 4 - Chapter 5 2.5D转换的使用技巧
原文:零元学Expression Blend 4 - Chapter 5 2.5D转换的使用技巧 本章将延续上篇零元学Expression Blend4 - Chapter 4元件重复运用的观念所制作 ...
- UWP开发:获取用户当前所在的网络环境(WiFi、移动网络、LAN…)
原文:UWP开发:获取用户当前所在的网络环境(WiFi.移动网络.LAN-) UWP开发:获取用户当前所在的网络环境: 在uwp开发中,有时候,我们需要判断用户所在的网络,是WiFi,还是移动网络,给 ...
- Standard C 语言标准函数库速查(彩色的函数列表,十分清楚)
Standard C 语言标准函数库速查 (Cheat Sheet) wcstombs 函数说明 #include <stdlib.h> size_t mbstowcs(wchar_t * ...
- 为新项目添彩的 10+ 超有用 JavaScript 库
快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...
- CentOS7 无法使用yum命令,无法更新解决方法
前言 设置网卡开机自动启动 设置国内dns服务器系统 修改CentOS-Base.repo中的地址 所参考的文章地址 前言 刚安装完的CentOS7的系统,发现无法使用yum命令进行更新,在更新的时候 ...
- Linux精要
Linux入门精要 Linux历史 1970年: linux元年,起始开发者为 Kenneth Lane Thompson 和 Dernis Ritchie, 现在知道为啥很多计算机是用1970年1月 ...
- javaweb各种框架组合案例(二):maven+spring+springMVC+mybatis
1.mybatis是比较新的半自动orm框架,效率也比较高,优点是sql语句的定制,管理与维护,包括优化,缺点是对开发人员的sql功底要求较高,如果比较复杂的查询,表与表之间的关系映射到对象与对象之间 ...
- ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据(转)
转载来源:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...
- ABP开发框架前后端开发系列---(4)Web API调用类的封装和使用
在前面随笔介绍ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以及简化了ABP框架的各个层的内容,使得我们项目结构更加清晰.上篇随笔已经介绍了字典模块中应用服务层接口的实现情况,并且通过 ...