二分+贪心


  首先二分L,转化成判定问题……

  但是判定不会判啊QAQ

  orz hzwer,用一个最小的矩形框住所有点后,直接往矩形的角上摆正方形……第二个用同样的方法摆,最后判一下剩下的能否被完全覆盖

  不得不说hzwer的这种实现方法很好懂……

  1. /**************************************************************
  2. Problem: 1052
  3. User: Tunix
  4. Language: C++
  5. Result: Accepted
  6. Time:308 ms
  7. Memory:1512 kb
  8. ****************************************************************/
  9.  
  10. //BZOJ 1052
  11. #include<vector>
  12. #include<cstdio>
  13. #include<cstring>
  14. #include<cstdlib>
  15. #include<iostream>
  16. #include<algorithm>
  17. #define rep(i,n) for(int i=0;i<n;++i)
  18. #define F(i,j,n) for(int i=j;i<=n;++i)
  19. #define D(i,j,n) for(int i=j;i>=n;--i)
  20. #define pb push_back
  21. using namespace std;
  22. inline int getint(){
  23. int v=,sign=; char ch=getchar();
  24. while(ch<''||ch>''){ if (ch=='-') sign=-; ch=getchar();}
  25. while(ch>=''&&ch<=''){ v=v*+ch-''; ch=getchar();}
  26. return v*sign;
  27. }
  28. const int N=,INF=1e9;
  29. typedef long long LL;
  30. /******************tamplate*********************/
  31. int n,L,mid;
  32. struct data{int x[N],y[N],top;}a;
  33. void cut(data &a,int x1,int y1,int x2,int y2){
  34. int tot=;
  35. F(i,,a.top)
  36. if (a.x[i]<x1 || a.x[i]>x2 || a.y[i]<y1 || a.y[i]>y2){
  37. tot++;
  38. a.x[tot]=a.x[i];
  39. a.y[tot]=a.y[i];
  40. }
  41. a.top=tot;
  42. }
  43. void solve(data &a,int fc){
  44. int x1=INF,y1=INF,x2=-INF,y2=-INF;
  45. F(i,,a.top){
  46. x1=min(a.x[i],x1),x2=max(a.x[i],x2);
  47. y1=min(a.y[i],y1),y2=max(a.y[i],y2);
  48. }
  49. if (fc==) cut(a,x1,y1,x1+mid,y1+mid);
  50. if (fc==) cut(a,x2-mid,y1,x2,y1+mid);
  51. if (fc==) cut(a,x1,y2-mid,x1+mid,y2);
  52. if (fc==) cut(a,x2-mid,y2-mid,x2,y2);
  53. }
  54. bool judge(){
  55. data b;
  56. F(x,,) F(y,,){
  57. b.top=a.top;
  58. F(i,,b.top)
  59. b.x[i]=a.x[i],b.y[i]=a.y[i];
  60. solve(b,x); solve(b,y);
  61. int x1=INF,y1=INF,x2=-INF,y2=-INF;
  62. F(i,,b.top){
  63. x1=min(b.x[i],x1),x2=max(b.x[i],x2);
  64. y1=min(b.y[i],y1),y2=max(b.y[i],y2);
  65. }
  66. if (x2-x1<=mid && y2-y1<=mid)return ;
  67. }
  68. return ;
  69. }
  70. int main(){
  71. #ifndef ONLINE_JUDGE
  72. freopen("1052.in","r",stdin);
  73. freopen("1052.out","w",stdout);
  74. #endif
  75. n=getint(); a.top=n;
  76. F(i,,n) a.x[i]=getint(),a.y[i]=getint();
  77. int l=,r=INF;
  78. while(l<=r){
  79. mid=l+r>>;
  80. if (judge()) L=mid,r=mid-;
  81. else l=mid+;
  82. }
  83. printf("%d\n",L);
  84. return ;
  85. }

1052: [HAOI2007]覆盖问题

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1181  Solved: 534
[Submit][Status][Discuss]

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

[Submit][Status][Discuss]

【BZOJ】【1052】【HAOI2007】覆盖问题的更多相关文章

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

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

  2. [BZOJ 1052][HAOI2007]覆盖问题(二分答案)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1052 分析: 挺有想法的一道题,先二分答案ans,主要是判断的问题. 首先可以弄出把所 ...

  3. BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS

    标题效果:特定n点.涵盖所有的点与同方三面.斧头要求方垂直边界,最小平方的需求方长值 最大值至少.答案是很明显的二分法 但验证是一个问题 考虑仅仅有三个正方形,故用一个最小矩形覆盖这三个正方形时至少有 ...

  4. 【以前的空间】bzoj 1052 [HAOI2007]覆盖问题

    这道题的思路挺简单的……就是可以证明如果要覆盖一个区域内的点,那么一定有一个正方形在这“区域内的点所围成的最大矩形的四个角中的一个”(不要吐槽很多的“的”……),对于长度r是否可以覆盖整个区域内的点, ...

  5. 【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)

    1052: [HAOI2007]覆盖问题 Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄 膜把这些小树遮盖起来,经过一番长久的 ...

  6. 【BZOJ】1052: [HAOI2007]覆盖问题

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1052 大概自己YY了个贪心然后过了... 二分答案,考虑如何check: 找到一个最小的矩 ...

  7. 【BZOJ】1052: [HAOI2007]覆盖问题(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1052 首先膜拜题解orz,表示只能想到二分... 贪心就是每一次找到一个最小的能包围所有点的矩阵,然 ...

  8. 1052: [HAOI2007]覆盖问题 - BZOJ

    Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小 ...

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

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

  10. 二分判定 覆盖问题 BZOJ 1052

    //二分判定 覆盖问题 BZOJ 1052 // 首先确定一个最小矩阵包围所有点,则最优正方形的一个角一定与矩形一个角重合. // 然后枚举每个角,再解决子问题 #include <bits/s ...

随机推荐

  1. 《第一行代码--Android》阅读笔记之数据持久化

    1.升级数据库 为了避免手工清空数据(或卸载重装APP),重写SQLiteOpenHelper里面的onUpgrade()方法   引用自http://blog.csdn.net/longvslove ...

  2. 菜鸟的js学习笔记

    学的越多感觉不会的越多.php+mysql学了点皮毛.知道搞web的是要会js的于是开始结合公司的项目开始学习js之旅(http://www.w3school.com.cn/b.asp) $(docu ...

  3. ASP.NET Web API安全认证

    http://www.cnblogs.com/codeon/p/6123863.html http://open.taobao.com/docs/doc.htm?spm=a219a.7629140.0 ...

  4. C# 添加系统计划任务方案

    你可以在Windows 计划任务管理器里面添加计划任务,调试OK后导出XML文件,然后在要部署的计算机上执行CMD导入命令,把计划任务信息配置导入到服务器上的计划任务列表中,命令如下: SCHTASK ...

  5. ruby on rails 实战(二)

    1,修改routes文件,让所有的action都可以使用get或者post方式访问 match "/:controller/:action" => "control ...

  6. Orcle 系统表

    oracle系统表大全 一.管理员 1.用户: select username from dba_users; 改口令 alter user spgroup identified by spgtest ...

  7. jquery的异步获取返回值为中文时乱码解决方法

    用jqgrid异步获取列表值,遇到个问题,服务器端从数据库取到的数据没有出现中文乱码问题(日志打出来是没有乱码的),但是异步传到客户的时候却出现了乱码. 服务器端已经编码过了(UTF-8编码).开始一 ...

  8. 包(package) 与 导入(import) 语句剖析

    A) 包(package):用于将完成不同功能的类分门别类,放在不同的目录下. B)命名规则:将公司域名翻转作为包名.例如www.vmaxtam.com域名,那么包名就是com.vmaxtam 每个字 ...

  9. C/C++ 关于大小端模式

    大端模式:  数据的高字节存在低地址  数据的低字节存在高地址 小端模式:  数据的高字节存在高地址  数据的低字节存在低地址 如图,i为int类型占4个字节,但只有1个字节的值为1,另外3个字节值为 ...

  10. spring中scope(作用越)理解

    今天总结了一下spring中作用域scope的用法.在spring中作用域通过配置文件形式的用法如下. <bean id="role" class="spring. ...