bzoj1052: [HAOI2007]覆盖问题(二分+搜索)
2018-03-06 13:59
417 查看
题目传送门
。
解法:
二分答案+搜索判断。
贪心思想正方形肯定刚刚好覆盖到边边。
那我们先手动删除一个正方形(四个角任选)
然后在判断下剩下的点是否都分别在两个正方形内就好了。。
代码实现:
。
解法:
二分答案+搜索判断。
贪心思想正方形肯定刚刚好覆盖到边边。
那我们先手动删除一个正方形(四个角任选)
然后在判断下剩下的点是否都分别在两个正方形内就好了。。
代码实现:
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> using namespace std; struct node {int x,y;}a[21000];int n,b[21000],len=0; const int inf=999999999; bool check(int x) { int up,down,right,left;up=-inf;right=-inf;down=inf;left=inf; for(int i=1;i<=len;i++) { up=max(up,a[b[i]].x);down=min(down,a[b[i]].x); right=max(right,a[b[i]].y);left=min(left,a[b[i]].y); } bool bk=true; for(int i=1;i<=len;i++) { node t=a[b[i]]; if(!((t.x<=down+x&&t.y<=left+x)||(t.x>=up-x&&t.y>=right-x))) {bk=false;break;} }if(bk==true)return true;bk=true; for(int i=1;i<=len;i++) { node t=a[b[i]]; if(!((t.x<=down+x&&t.y>=right-x)||(t.x>=up-x&&t.y<=left+x))) {bk=false;break;} }if(bk==true)return true;return false; } void del(int up,int down,int left,int right) { len=0;for(int i=1;i<=n;i++)if(a[i].x>up||a[i].x<down||a[i].y<left||a[i].y>right)b[++len]=i; } int main() { scanf("%d",&n);int up,down,right,left;up=-inf;right=-inf;down=inf;left=inf; for(int i=1;i<=n;i++) { scanf("%d%d",&a[i].x,&a[i].y); up=max(up,a[i].x);down=min(down,a[i].x); right=max(right,a[i].y);left=min(left,a[i].y); } int l=1,r=max(up-down,right-left),mid,ans; while(l<=r) { mid=(l+r)/2;bool bk=false; for(int i=1;i<=4;i++) { if(i==1)del(up,up-mid,left,left+mid); else if(i==2)del(up,up-mid,right-mid,right); else if(i==3)del(down+mid,down,left,left+mid); else del(down+mid,down,right-mid,right); if(check(mid)==true) {bk=true;break;} }if(bk==true) {ans=mid,r=mid-1;}else l=mid+1; }printf("%d\n",ans); return 0; }
相关文章推荐
- bzoj1052: [HAOI2007]覆盖问题(二分+构造)
- bzoj 1052: [HAOI2007]覆盖问题(二分+贪心)
- bzoj1052 HAOI2007 覆盖问题
- 【二分+贪心】BZOJ1052: [HAOI2007]覆盖问题
- BZOJ_1052_[HAOI2007]_覆盖问题_(二分+贪心)
- BZOJ 1052 HAOI2007 覆盖问题 二分答案+DFS
- [BZOJ 1052][HAOI2007]覆盖问题(二分答案)
- [BZOJ1052][HAOI2007]覆盖问题(二分+dfs)
- BZOJ1052【HAOI2007】覆盖问题
- BZOJ 1052: [HAOI2007]覆盖问题 二分, 贪心
- bzoj1052 [HAOI2007]覆盖问题(二分答案+贪心)
- [BZOJ1052][HAOI2007]覆盖问题 二分+贪心
- BZOJ1052: [HAOI2007]覆盖问题(洛谷P2218)
- bzoj 1052: [HAOI2007]覆盖问题 (二分+dfs)
- 【BZOJ1052】【HAOI2007】覆盖问题 二分+深搜check
- 0003算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
- 1052: [HAOI2007]覆盖问题(贪心)
- 【分治法】分治法与二分搜索,棋盘覆盖问题
- [HAOI2007]覆盖问题
- bzoj 1052: [HAOI2007]覆盖问题