1052: [HAOI2007]覆盖问题

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

Source

【分析】

  为什么黄学长称之为贪心。。?不懂。。

  首先我们用一个最小的矩形把所有点框住(这个很容易求吧?),

  如果答案的正方形边长等于这个矩形的宽,那么肯定有两个正方形是推到两边的,就是至少有一个正方形的顶点是矩形的顶点。

  如果正方形边长小于宽,因为矩形每条边至少有一个点,所以一定有一个正方形覆盖了矩形两条边,那么这个至少也有一个正方形的顶点是矩形的顶点。

  大于宽就不用说了吧?

  那么我们先二分答案,然后就枚举矩形的四个角,把覆盖的点删掉,递归做子问题就可以了。

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 20010
#define INF 0xfffffff int mymin(int x,int y) {return x<y?x:y;}
int mymax(int x,int y) {return x>y?x:y;} struct node
{
int x,y;
int p;
}t[Maxn]; int n,tot; void change(int x,int y,int nw,int L)
{
for(int i=;i<=n;i++) if(t[i].x>=x&&t[i].y>=y&&t[i].p==)
{
if(t[i].x-x>L||t[i].y-y>L) continue;
t[i].p=nw;tot--;
}
} void change2(int nw)
{
for(int i=;i<=n;i++) if(t[i].p==nw)
{
t[i].p=;
tot++;
}
} bool check(int L,int nw)
{
if(tot==) return ;
int x1=INF,x2=-INF,y1=INF,y2=-INF;
for(int i=;i<=n;i++) if(t[i].p==)
{
x1=mymin(x1,t[i].x);x2=mymax(x2,t[i].x);
y1=mymin(y1,t[i].y);y2=mymax(y2,t[i].y);
}
if(nw==) return mymax(x2-x1,y2-y1)<=L;
int nx,ny;
bool ok=;
nx=x1,ny=y1;change(nx,ny,nw,L);
if(check(L,nw-)) ok=;change2(nw);
if(ok) return ; nx=x1,ny=y2-L;change(nx,ny,nw,L);
if(check(L,nw-)) ok=;change2(nw);
if(ok) return ; nx=x2-L,ny=y1;change(nx,ny,nw,L);
if(check(L,nw-)) ok=;change2(nw);
if(ok) return ; nx=x2-L,ny=y2-L;change(nx,ny,nw,L);
if(check(L,nw-)) ok=;change2(nw);
if(ok) return ;
return ;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&t[i].x,&t[i].y);
t[i].p=;
}
int l=,r=INF;
tot=n;
while(l<r)
{
int mid=(l+r)>>;
if(check(mid,)) r=mid;
else l=mid+;
}
printf("%d\n",l);
return ;
}

2017-02-22 14:07:58

【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)的更多相关文章

  1. BZOJ 1011--[HNOI2008]遥远的行星(乱搞)

    1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 5684  Solved ...

  2. bzoj 1811: [Ioi2005]mea 贪心,乱搞

    [Ioi2005]mea Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 690  Solved: 257[Submit][Status][Discuss ...

  3. BZOJ 3721: PA2014 Final Bazarek【乱搞】

    有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n<=1000000),表示商品数量.接下来一行有n个整数,表示每件商品的价格,范 ...

  4. BZOJ 1052: [HAOI2007]覆盖问题

    BZOJ 1052: [HAOI2007]覆盖问题 题意:给定平面上横纵坐标在-1e9~1e9内的20000个整数点的坐标,用三个大小相同边平行于坐标轴的正方形覆盖(在边界上的也算),问正方形的边长最 ...

  5. BZOJ-3225 立方体覆盖 线段树+扫描线+乱搞

    看数据范围像是个暴力,而且理论复杂度似乎可行,然后被卡了两个点...然后来了个乱搞的线段树+扫描线.. 3225: [Sdoi2008]立方体覆盖 Time Limit: 2 Sec Memory L ...

  6. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  7. 【BZOJ 4148】 4148: [AMPPZ2014]Pillars (乱搞)

    4148: [AMPPZ2014]Pillars Time Limit: 5 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 100  Solve ...

  8. Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...

  9. [BZOJ1052][HAOI2007]覆盖问题 二分+贪心

    1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2053  Solved: 959 [Submit][Sta ...

随机推荐

  1. Item 6 消除过期的对象引用

    过期对象引用没有清理掉,会导致内存泄漏.对于没有用到的对象引用,可以置空,这是一种做法.而最好的做法是,把保存对象引用的变量清理掉,多用局部变量.   什么是内存泄漏? 在Java中,对象的内存空间回 ...

  2. shell 给未定义的变量设定默认值 ${parameter:-word}

    参考: [ Unix & Linux ] Shell Demo $echo ${JENKINS_VERSION:-2.7.4} 2.7.4 $JENKINS_VERSION=2.99 $ech ...

  3. UIDatePicker---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址: iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址  UIDatePicker //转载请注明出处--本文永久链接:http://www ...

  4. quick 用系统浏览器打开url

    需求描述: 在我们的游戏里面增加一个链接,直接用浏览器打开,进入到对应网站,进行一些支付活动. 解决: 于是我去百度了一下,发现了这篇文章,http://blog.csdn.net/teng_onth ...

  5. [bzoj4569][SCOI2016]萌萌哒-并查集+倍增

    Brief Description 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条 件表示为四个数,l1,r1,l2,r2,即两 ...

  6. 基于 python imageai 对象检测 目标检测 识别 视频

    1.视频连接如下: http://www.iqiyi.com/w_19s6vownit.html

  7. Webmin LFD to LFI

    Webmin < 1.290 / Usermin < 1.220 - Arbitrary File Disclosure (Perl) https://www.exploit-db.com ...

  8. Perl中文件读取操作

    Perl中文件读取操作 http://blog.csdn.net/yangxuan12580/article/details/51506216

  9. 1006. Team Rankings

    Description It's preseason and the local newspaper wants to publish a preseason ranking of the teams ...

  10. 快速排序算法的c++实现

    很早以前看过快排算法觉得自己掌握了,,课今天用的时候发现老出错,认真想想发现自己一直搞错了... 下面先说一下我的想法: 首先,快排的思想就是 从数列中挑出一个元素,称为 "基准" ...