BZOJ1052: [HAOI2007]覆盖问题
来源:互联网 发布:上海sai软件培训 编辑:程序博客网 时间:2024/06/05 00:43
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
0 1
0 -1
1 0
-1 0
Sample Output
1
HINT
100%的数据,N<=20000
Source
这题满足贪心性质
将x,y坐标的极值求出来,则正方形的一个顶点一定是x,y坐标的极值点(一共四个)
然后递归处理
我写了半天 把long long 换成int就过了 调了好久
后来发现应该改成%lld 否则读负数好像会出锅
我真是弱
#include<bits/stdc++.h> using namespace std; const int maxn=20020;const int inf=1e9; struct point{ int x,y; int flag;}p[maxn]; int n,ans; bool chk(int len,int flag){ if(flag==4) { for(int i=1;i<=n;i++) if(!p[i].flag) return false; return true; } int rx=-inf,lx=inf,ry=-inf,ly=inf; for(int i=1;i<=n;i++) if(!p[i].flag) rx=max(rx,p[i].x),lx=min(lx,p[i].x),ry=max(ry,p[i].y),ly=min(ly,p[i].y);bool now=false; for(int i=1;i<=n;i++)//rx ry { if(p[i].x+len>=rx&&p[i].y+len>=ry&&!p[i].flag) p[i].flag=flag; } now=chk(len,flag+1); for(int i=1;i<=n;i++) { if(p[i].flag==flag) p[i].flag=0; } if(now) return true; for(int i=1;i<=n;i++)//lx ry { if(p[i].x-len<=lx&&p[i].y+len>=ry&&!p[i].flag) p[i].flag=flag; } now=chk(len,flag+1); for(int i=1;i<=n;i++) { if(p[i].flag==flag) p[i].flag=0; } if(now) return true; for(int i=1;i<=n;i++)//rx ly { if(p[i].x+len>=rx&&p[i].y-len<=ly&&!p[i].flag) p[i].flag=flag; } now=chk(len,flag+1); for(int i=1;i<=n;i++) { if(p[i].flag==flag) p[i].flag=0; } if(now) return true; for(int i=1;i<=n;i++)//lx ly { if(p[i].x-len<=lx&&p[i].y-len<=ly&&!p[i].flag) p[i].flag=flag; } now=chk(len,flag+1); for(int i=1;i<=n;i++) { if(p[i].flag==flag) p[i].flag=0; } if(now) return true; return false;} int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y); int l=0,r=inf; while(l<=r) { int mid=l+r>>1; if(chk(mid,1)) ans=mid,r=mid-1; else l=mid+1; } printf("%d\n",ans);}
0 0
- bzoj1052 HAOI2007 覆盖问题
- BZOJ1052【HAOI2007】覆盖问题
- 【bzoj1052】[HAOI2007]覆盖问题
- BZOJ1052: [HAOI2007]覆盖问题
- BZOJ1052: [HAOI2007]覆盖问题
- 【bzoj1052】【HAOI2007】【覆盖问题】【贪心】
- 【BZOJ1052】【HAOI2007】覆盖问题 二分+深搜check
- [BZOJ1052][HAOI2007]覆盖问题(二分+dfs)
- 暴搜 bzoj1052 覆盖问题
- [BZOJ1052]=[BZOJ3760]覆盖问题
- 1052: [HAOI2007]覆盖问题
- bzoj 1052: [HAOI2007]覆盖问题
- 【BZOJ 1052】 [HAOI2007]覆盖问题
- BZOJ 1052: [HAOI2007]覆盖问题
- BZOJ 1052 [HAOI2007]覆盖问题
- 1052: [HAOI2007]覆盖问题(贪心)
- BZOJ 1052: [HAOI2007]覆盖问题 二分, 贪心
- BZOJ 1052 HAOI2007 覆盖问题 二分答案+DFS
- 注入式框架Butterknife(黄油刀)的使用
- 专题:计算几何学 凸包 hdu2108 shape of hdu
- models数据库操作2
- 全局变量与命名规范
- 学习经历
- BZOJ1052: [HAOI2007]覆盖问题
- ajax的使用及数据的获取
- asp.net——$是什么
- crack me160题 第十一题(序号40)DaNiEl-RJ 注册机
- 解决:JS代码URL传中文参数乱码
- 【JZOJ4883】【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰
- [leetCode] Expression Add Operators
- 【模板】 排序算法
- Hadoop Mapreducer两文件数据求交拼接