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. 【BZOJ3191】【JLOI2013】卡牌游戏 [DP]

    卡牌游戏 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description   N个人坐成一圈玩游戏.一开始我 ...

  2. 【BZOJ】2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛

    [算法]树形DP [题解]没有上司的舞会?233 f[x][0]=∑max(f[v][0],f[v][1]) f[x][1]=(∑f[v][0])+1 #include<cstdio> # ...

  3. 【BZOJ】3038: 上帝造题的七分钟2 && 3211: 花神游历各国

    [算法]线段树||树状数组&&并查集 [题解]修改必须暴力单点修改,然后利用标记区间查询. 优化:一个数经过不断开方很快就会变成1,所以维护区间最大值. 修改时访问到的子树最大值< ...

  4. MySQL查询 45道练习题

    SQL查询45道练习题 1.查询Student表中的所有记录的Sname.Ssex和Class列.select sname,ssex,class from student2.查询教师所有的单位即不重复 ...

  5. B题 hdu 1407 测试你是否和LTC水平一样高

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1407 测试你是否和LTC水平一样高 Time Limit: 2000/1000 MS (Java/Ot ...

  6. python基础===* 解包,格式化输出和print的一点知识

    python3中的特性: >>> name = "botoo" >>> print(f"my name is {name}" ...

  7. python基础===Character string

    本文转自:python之Character string 1.python字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串,l Python不支持单 ...

  8. 仿照linux dpm机制,实现自己的dpm【转】

    转自:http://blog.csdn.net/lixiaojie1012/article/details/23788713 前边我们讨论分析了linux 内核的dpm实现,分析的目的在于学以致用:在 ...

  9. sicily 数据结构 1014. Translation

    Description You have just moved from Waterloo to a big city. The people here speak an incomprehensib ...

  10. node.js3

    第一部分:express(MVC) 1.下载express npm install express --save 2.引入express require('express') 中间件 body-par ...