和平精英(并查集 + 二分)

这是一个关于军事演习的问题,目标是确定最小的雷达侦测半径,以防止敌人从雷达覆盖不到的地方到达大本营。通过二分查找法寻找合适的半径,并使用并查集判断各个雷达点形成的圆是否能覆盖整个矩形区域,从而确保大本营的安全。给定雷达数量、矩形边界和各个雷达坐标,输出满足条件的最小半径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**题目描述 **
在未来,和平成为世界主流。但出于战略意义上的考虑,以及训练成果考核的需要,各国约定:每隔一段时间,便进行一场世界范围内的联合军事演习。
2120年的军事演习开始了,演习场地是一个矩形,左上角坐标为(0,0),右下角坐标为 (x,y)。
敌人起始位置在(0,0),我方大本营在 (x,y)。
我方有 n个雷达分布在矩形之中, n个雷达的侦测范围都是半径为 r的圆。
敌人只能在矩形内活动,并且不能走进雷达的侦测范围。
现在,你需要找到一个最小的r,使得敌军不能避开雷达来到我方大本营。

输入描述:
第一行输入n,x,y,表示有n个雷达,矩形的右上角坐标为 (x,y)。其中,1≤n≤100,1≤x,y≤1000000000。
接下来输入 n行,每行包括两个整数ai,bi。代表第i个雷达的坐标(ai,bi)。其中,1≤ai≤x,1≤bi≤y

输出描述:
输出一行,包含一个浮点数ans。(输出保留三位小数)
示例1
输入
1 5 5
2 2

输出
2.000

说明
当唯一一个雷达(2,2)侦察最小半径为2.00时,使得敌军不能避开雷达来到我方大本营。

示例2
输入
2 10 10
1 3
3 1

输出
1.414

说明
当雷达半径约为1.414时,两个雷达侦测范围相切,使得敌军不能避开雷达来到我方大本营。

思路
二分找半径值,对每个点,确认是否与矩形边相交,若相交,则将相交边与点相联系,若该点成的圆与其他点成圆相交,则将两点相联系,最后确认是否能将(0,0)(x,y)切割开来

代码实现

#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=205;
const int M=20016;
const int INF=0x3f3f3f3f;
const ll LINF=1e18;
const ull sed=31;
const ll mod= 998244353;
const double eps=1e-5;
const double PI=acos(-1.0);
typedef pair<int,int>P;
typedef pair<double,double>Pd;
    
template<class 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值