[HAOI2007]覆盖问题
题目描述
某人在山上种了N棵小树苗。冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定 用3个L*L的正方形塑料薄膜将小树遮起来。我们不妨将山建立一个平面直角坐标系,设第i棵小树的坐标为(Xi,Yi),3个L*L的正方形的边要求平行 与坐标轴,一个点如果在正方形的边界上,也算作被覆盖。当然,我们希望塑料薄膜面积越小越好,即求L最小值。
输入输出格式
输入格式:
第一行有一个正整数N,表示有多少棵树。
接下来有N行,第i+1行有2个整数Xi,Yi,表示第i棵树的坐标,保证不会有2个树的坐标相同。
输出格式:
一行,输出最小的L值。
输入输出样例
说明
数据范围
100%的数据,-1,000,000,000<=Xi,Yi<=1,000,000,000
30%的数据,N<=100
50%的数据,N<=2000
100%的数据,N<=20000
二分答案ans
求出最大的包括n个点的矩形
说明至少有一个正方形与外包矩形有两条边及以上相接,就是一个公共角
于是我们可以对于前两个正方形枚举与哪个角相接,对于第三个正方形判断就行了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long lol;
struct Data
{
int top;
int x[],y[];
}a;
int Minx,Miny,Maxx,Maxy,n,ans;
void cut(Data &b,int x1,int x2,int y1,int y2)
{int i;
int tot=;
for(i=;i<=b.top;i++)
{
if ((b.x[i]<x1||b.x[i]>x2)||(b.y[i]<y1||b.y[i]>y2))
b.x[++tot]=b.x[i],b.y[tot]=b.y[i];
}
b.top=tot;
}
void work(Data &b,int c,int mid)
{int i;
Maxx=-1e9;Minx=1e9;
Maxy=-1e9;Miny=1e9;
for (i=;i<=b.top;i++)
{
Maxx=max(Maxx,b.x[i]);Minx=min(Minx,b.x[i]);
Maxy=max(Maxy,b.y[i]);Miny=min(Miny,b.y[i]);
}
if (c==)
{
cut(b,Minx,Minx+mid,Miny,Miny+mid);
}
if (c==)
{
cut(b,Minx,Minx+mid,Maxy-mid,Maxy);
}
if (c==)
{
cut(b,Maxx-mid,Maxx,Maxy-mid,Maxy);
}
if (c==)
{
cut(b,Maxx-mid,Maxx,Miny,Miny+mid);
}
}
bool check(int mid)
{int x,y,i,x1,y1,x2,y2;
Data b;
for (x=;x<=;x++)
{
for (y=;y<=;y++)
{
b.top=a.top;
for (i=;i<=b.top;i++)
{
b.x[i]=a.x[i];b.y[i]=a.y[i];
}
work(b,x,mid);work(b,y,mid);
x1=-1e9;x2=1e9;
y1=-1e9;y2=1e9;
for (i=;i<=b.top;i++)
{
x1=max(x1,b.x[i]);x2=min(x2,b.x[i]);
y1=max(y1,b.y[i]);y2=min(y2,b.y[i]);
}
if (x1-x2<=mid&&y1-y2<=mid) return ;
}
}
return ;
}
int main()
{int i;
cin>>n;
for (i=;i<=n;i++)
{
scanf("%d%d",&a.x[i],&a.y[i]);
}
a.top=n;
int l=,r=1e9;
while (l<=r)
{
int mid=(l+r)/;
if (check(mid)) ans=mid,r=mid-;
else l=mid+;
}
cout<<ans;
}
[HAOI2007]覆盖问题的更多相关文章
- BZOJ 1052: [HAOI2007]覆盖问题
BZOJ 1052: [HAOI2007]覆盖问题 题意:给定平面上横纵坐标在-1e9~1e9内的20000个整数点的坐标,用三个大小相同边平行于坐标轴的正方形覆盖(在边界上的也算),问正方形的边长最 ...
- 【BZOJ1052】 [HAOI2007]覆盖问题
BZOJ1052 [HAOI2007]覆盖问题 前言 小清新思维题. 最近肯定需要一些思维题挽救我这种碰到题目只会模板的菜鸡. 这题腾空出世? Solution 考虑一下我们二分答案怎么做? 首先转换 ...
- 【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)
1052: [HAOI2007]覆盖问题 Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄 膜把这些小树遮盖起来,经过一番长久的 ...
- 洛谷 P2218 [HAOI2007]覆盖问题 解题报告
P2218 [HAOI2007]覆盖问题 题目描述 某人在山上种了\(N\)棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他 ...
- [BZOJ1052][HAOI2007]覆盖问题 二分+贪心
1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2053 Solved: 959 [Submit][Sta ...
- 1052: [HAOI2007]覆盖问题 - BZOJ
Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小 ...
- BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS
标题效果:特定n点.涵盖所有的点与同方三面.斧头要求方垂直边界,最小平方的需求方长值 最大值至少.答案是很明显的二分法 但验证是一个问题 考虑仅仅有三个正方形,故用一个最小矩形覆盖这三个正方形时至少有 ...
- 【BZOJ】1052: [HAOI2007]覆盖问题
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1052 大概自己YY了个贪心然后过了... 二分答案,考虑如何check: 找到一个最小的矩 ...
- 【BZOJ】1052: [HAOI2007]覆盖问题(贪心)
http://www.lydsy.com/JudgeOnline/problem.php?id=1052 首先膜拜题解orz,表示只能想到二分... 贪心就是每一次找到一个最小的能包围所有点的矩阵,然 ...
随机推荐
- mysql数据库导入sql文件时提示“Error Code: 1153 - Got a packet bigger than 'max_allowed_packet' bytes”解决办法
向mysql数据库中导入sql文件时,如果文件过大(几百M),会提示"Error Code: 1153 - Got a packet bigger than 'max_allowed_pac ...
- 使用MVC5+Entity Framework6的Code First模式创建数据库并实现增删改查功能
此处采用VS2017+SqlServer数据库 一.创建项目并引用dll: 1.创建一个MVC项目 2.采用Nuget安装EF6.1.3 二.创建Model 在models文件夹中,建立相应的mode ...
- Twisted UDP编程技术
实战演练1:普通UDP UDP是一种无连接对等通信协议,没有服务器和客户端概念,通信的任何一方均可通过通信原语直接和其他方通信 1.相对于TCP,UDP编程只需定义DatagramProtocol子类 ...
- linux 50个常用命令
1.ls命令 ls是list的缩写,常用命令为ls(显示出当前目录列表),ls -l(详细显示当前目录列表),ls -lh(人性化的详细显示当前目录列表),ls -a(显示出当前目录列表,包含隐藏文件 ...
- 【iOS】swift 枚举
枚举语法 你可以用enum开始并且用大括号包含整个定义体来定义一个枚举: enum SomeEnumeration { // 在这里定义枚举 } 这里有一个例子,定义了一个包含四个方向的罗盘: enu ...
- 集合Collection总览
前言 声明,本文使用的是JDK1.8 从今天开始正式去学习Java基础中最重要的东西--->集合 无论在开发中,在面试中这个知识点都是非常非常重要的,因此,我在此花费的时间也是很多,得参阅挺多的 ...
- LeetCode & Q268-Missing Number-Easy
Array Math Bit Manipulation Description: Given an array containing n distinct numbers taken from 0, ...
- 第四章 使用jQuery操作DOM
第四章 使用jQuery操作DOM 一.DOM操作 在jQuery中的DOM操作主要可分为样式操作.文本和value属性值操作.节点操作: 节点操作又包含属性操作.节点遍历和CSS-DOM操作. 其中 ...
- C# 一个初学者对 依赖注入 IOC 的理解( 含 Unity 的使用)
通过 人打电话 来谈谈自己对IOC的理解 版本1.0 public class Person { public AndroidPhone Phone { get; set; } public void ...
- springmvc的ModelAttribute注解
先看一个没有使用@ModelAttribute的Controller方法. @RequestMapping("/save") public String save(User use ...