Description

给定一个$l\;\times\;w$的矩形,和$n$个圆,求最小的$k$使得每个圆的半径$\;\times\;k$后,能覆盖整个矩形.

Input

第一行一个整数$T$,表示数据组数.

以下$T$组数据,每组数据第一行三个整数$N,L,W$,表示圆个数和矩形大小.

接下来$N$行,每行三个正整数$x[i],y[i],R[i]$表示一个圆心的坐标和原始半径.

Output

对于每组数据,输出一个实数$K$,保留$3$位小数.

Sample Input

1
1 2 2
1 1 1

Sample Output

1.414

HINT

$t\;\leq\;10,n\;\leq\;50,x[i],y[i],R[i]\;\leq\;1000$

Solution

二分$k$,分治矩形判断当前$k$是否可行:

$1.$如果当前矩形的四个顶点在同一圆内,可行;

$2.$如果当前矩形有一个顶点不在圆内,不可行;

$3.$如果当前矩形的四个顶点不在同一圆内,分成$4$部分继续判断.

#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 55
#define K 1e-7
#define eps 1e-13
using namespace std;
int n,t;
double a[N],x[N],y[N],r[N],l,w,lef,rig,mid;
inline double sqr(double x){
return x*x;
}
inline bool in(int i,double k,double n,double m){
double d=sqr(x[i]-n)+sqr(y[i]-m);
return d<=sqr(r[i])+eps;
}
inline bool chk(double k,double n1,double n2,double m1,double m2){
bool f1=0,f2=0,f3=0,f4=0;
if(fabs(n1-n2)<eps&&fabs(m1-m2)<eps) return true;
for(int i=1,l1,l2,l3,l4;i<=n;++i){
l1=in(i,k,n1,m1);l2=in(i,k,n1,m2);
l3=in(i,k,n2,m1);l4=in(i,k,n2,m2);
if(l1&&l2&&l3&&l4) return true;
f1|=l1;f2|=l2;f3|=l3;f4|=l4;
}
if(!f1||!f2||!f3||!f4) return false;
double mm=(m1+m2)*0.5,nn=(n1+n2)*0.5;
return chk(k,n1,nn,m1,mm)&&chk(k,n1,nn,mm,m2)\
&&chk(k,nn,n2,m1,mm)&&chk(k,nn,n2,mm,m2);
}
inline void Aireen(){
scanf("%d",&t);
while(t--){
scanf("%d%lf%lf",&n,&l,&w);
for(int i=1;i<=n;++i)
scanf("%lf%lf%lf",&x[i],&y[i],&a[i]);
lef=0.0;rig=l+w;
while(lef+K<rig){
mid=(lef+rig)*0.5;
for(int i=1;i<=n;++i)
r[i]=a[i]*mid;
if(chk(mid,0.0,l,0.0,w)) rig=mid;
else lef=mid+K;
}
printf("%.3lf\n",lef);
}
}
int main(){
freopen("cover.in","r",stdin);
freopen("cover.out","w",stdout);
Aireen();
fclose(stdin);
fclose(stdout);
return 0;
}

[bzoj2517]矩形覆盖的更多相关文章

  1. 【OpenJudge 1793】矩形覆盖

    http://noi.openjudge.cn/ch0405/1793/ 好虐的一道题啊. 看数据范围,一眼状压,然后调了好长时间QwQ 很容易想到覆盖的点数作为状态,我用状态i表示至少覆盖状态i表示 ...

  2. NOIP2002矩形覆盖[几何DFS]

    题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...

  3. bzoj 1185 旋转卡壳 最小矩形覆盖

    题目大意 就是求一个最小矩形覆盖,逆时针输出其上面的点 这里可以看出,那个最小的矩形覆盖必然有一条边经过其中凸包上的两个点,另外三条边必然至少经过其中一个点,而这样的每一个点逆时针走一遍都满足单调性 ...

  4. [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖

    跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) ...

  5. NOIP2002 矩形覆盖

    题四 矩形覆盖(存盘名NOIPG4) [问题描述]: 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2), ...

  6. UVA-11983-Weird Advertisement(线段树+扫描线)[求矩形覆盖K次以上的面积]

    题意: 求矩形覆盖K次以上的面积 分析: k很小,可以开K颗线段树,用sum[rt][i]来保存覆盖i次的区间和,K次以上全算K次 // File Name: 11983.cpp // Author: ...

  7. 【旋转卡壳+凸包】BZOJ1185:[HNOI2007]最小矩形覆盖

    1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1945  Solve ...

  8. BZOJ:1185: [HNOI2007]最小矩形覆盖

    1185: [HNOI2007]最小矩形覆盖 这计算几何……果然很烦…… 发现自己不会旋转卡壳,补了下,然后发现求凸包也不会…… 凸包:找一个最左下的点,其他点按照与它连边的夹角排序,然后维护一个栈用 ...

  9. BZOJ 1185: [HNOI2007]最小矩形覆盖 [旋转卡壳]

    1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1435  Solve ...

随机推荐

  1. 配置Supervisor开机启动

    配置Supervisor开机启动: 新建一个"supervisord.service"文件 # dservice for systemd (CentOS 7.0+) # by ET ...

  2. EntityFramework Core 封装

    public class EntityBaseRepository<T> : IEntityBaseRepository<T> where T : class, IEntity ...

  3. expect结合ssh遍历线上机器

    有个需求,有个文件删除了,但是不确定线上机器还都存不存在 #!/home/work/.jumbo/bin/expect -f set timeout - set mac [lindex $argv ] ...

  4. PAT 1005. 继续(3n+1)猜想 (25) JAVA

    当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进行验证的时候,我们需要计算3.5.8.4.2.1,则当我们对n=5.8.4.2进行验证的时候,就可以直接 ...

  5. smarty foreach循环

    1,smarty foreach1,单纯的数组array(1000,2000,3000),使用foreach(from = $array item=foo){$foo}2,键值对数组<ul> ...

  6. 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题

    下面两种现象,用同一种方法解决 1.解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题 2.突然有一天首页访问图片很慢,至少隔20多秒所有图片才会出来.(解析:app使 ...

  7. noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T36——T45

    T36 计算多项式的值 描述 假定多项式的形式为xn+xn-1+-+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入 输入仅一行,包括x和n,用单个空格隔开.x在flo ...

  8. Xamarin.Android 反复报 Please Download android_m2repository_rxx.zip 的解决办法

    我原来一直用的是老版本的 Xamarin , android_m2repository_rxx.zip 早已在 C:\Users\XXX\AppData\Local\Xamarin\Android.S ...

  9. unity3d Vector3.Lerp解析

    Vector3.Lerp:http://www.ceeger.com/Script/Vector3/Vector3.Lerp.html 手册中描述的不是很详细,什么叫“按照数字t在from到to之间插 ...

  10. Android Studio代码混淆插件

    之前给公司的App添加代码混淆,在代码的混淆过程也遇到了不少的问题,再加上最近学习了一下Android Studio插件的开发,所以就开发一个代码混淆插件方便项目的代码混淆. 截图 第三方库列表清单 ...