博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【以前的空间】bzoj 1052 [HAOI2007]覆盖问题
阅读量:5264 次
发布时间:2019-06-14

本文共 1950 字,大约阅读时间需要 6 分钟。

  这道题的思路挺简单的……就是可以证明如果要覆盖一个区域内的点,那么一定有一个正方形在这“区域内的点所围成的最大矩形的四个角中的一个”(不要吐槽很多的“的”……),对于长度r是否可以覆盖整个区域内的点,只需要先枚举第一个矩形在“区域内的点所围成的最大矩形的四个角中的哪一个”,然后再枚举下一个点在“区域内的剩余点所围成的最大矩形的四个角中的哪一个”第三个正方形就直接判断余下的点的最大最小差值是否小于r就行了……再然后就直接二分答案了……然后,注意一种情况,就是出现一个或者两个矩形就可以覆盖完整个区域点的情况(可能是因为我傻×于是就被这里坑了一下)……

 

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384type  arr=record    x,y:longint;  end;var  a:array[0..250000]of arr;  i,j,k,l,r,n,mid,maxx,minx,maxy,miny:longint;  vs:array[0..250000]of longint; procedure find(var x1,x2,y1,y2:longint);begin  x1:=-maxlongint;  x2:=maxlongint;  y1:=-maxlongint;  y2:=maxlongint;  for i:=1 to n do if vs[i]=0 then    begin      if a[i].x>x1 then x1:=a[i].x;      if a[i].x
y1 then y1:=a[i].y; if a[i].y
=a[i].x) and (miny+x>=a[i].y) then vs[i]:=y; if dfs(x,y+1) then exit(true); for i:=1 to n do if vs[i]=y then vs[i]:=0; for i:=1 to n do if vs[i]=0 then if (minx+x>=a[i].x) and (maxy-x<=a[i].y) then vs[i]:=y; if dfs(x,y+1) then exit(true); for i:=1 to n do if vs[i]=y then vs[i]:=0; for i:=1 to n do if vs[i]=0 then if (maxx-x<=a[i].x) and (miny+x>=a[i].y) then vs[i]:=y; if dfs(x,y+1) then exit(true); for i:=1 to n do if vs[i]=y then vs[i]:=0; for i:=1 to n do if vs[i]=0 then if (maxx-x<=a[i].x) and (maxy-x<=a[i].y) then vs[i]:=y; if dfs(x,y+1) then exit(true); for i:=1 to n do if vs[i]=y then vs[i]:=0; exit(false);end; begin readln(n); for i:=1 to n do readln(a[i].x,a[i].y); fillchar(vs,sizeof(vs),0); find(maxx,minx,maxy,miny); l:=1; if maxx-minx>maxy-miny then r:=maxx-minx else r:=maxy-miny; while l<=r do begin fillchar(vs,sizeof(vs),0); mid:=(l+r)>>1; if dfs(mid,1) then r:=mid-1 else l:=mid+1; end; writeln(l); readln;end.
View Code

 

转载于:https://www.cnblogs.com/Macaulish/p/6492076.html

你可能感兴趣的文章
react双组件传值和传参
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>