「题解」POI2005 AKC-Special Forces Manoeuvres

本文详细探讨了POI2005年AKC-Special Forces Manoeuvres问题的解决方案,通过研究几何性质和随机化算法,提出了一种基于代表点的方法,来确定圆的交集是否为空。算法的时间复杂度为O(n^2),并附有使用余弦定理和相似三角形解决两圆交集的参考程序。

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

本文将同步发布于:

题目

题目链接:洛谷 P3428官网

题意简述

给定 n n n 个圆 ( x i , y i , r i ) (x_i,y_i,r_i) (xi,yi,ri),每个圆对应一个点集 S i = { ( x , y ) ∣ ( x − x i ) 2 + ( y − y i ) 2 ≤ r i 2 } S_i=\left\{(x,y)\mid (x-x_i)^2+(y-y_i)^2\leq r_i^2\right\} Si={ (x,y)(xxi)2+(yyi)2ri2}

求一个最小的 i i i 满足 ∩ j = 1 i S j = ∅ \cap_{j=1}^i S_j=\varnothing j=1iSj=;如果无解输出 NIE

题解

简单又自然的随机化

我们考虑枚举 i i i,然后判定 S 1 ∼ i S_{1\sim i} S1i 的交集是否为空。

如何判定呢?我们想到一个简单的方法,我们随机一些在圆的边界上的点,只需要判定这些点是否存至少在一个点在所有圆内即可。

这种方法简单又自然,但是随机化算法正确率不高,这远远不够。

研究几何性质

如果做计算几何题而抛弃几何性质,所得到的做法往往是劣解。

继续沿着上面的思路,我们同样考虑枚举 i i i,然后判定 S 1 ∼ i S_{1\sim i} S1i 的交集是否为空。

不同的是,我们定义一个交集中横坐标最大的点为代表点(代表点只会有一个,这是因为圆是凸集,凸集的交集还是凸集)。

我们发现,如果一些圆的交集非空,那么其代表点一定满足:它是所有圆两两交集的代表中横坐标最小的那个。

证明十分显然,考虑交集的意义即可。

最后的结论

综上所述,对于一个 i i i,我们只需要求出 1 ∼ i − 1 1\sim i-1 1i1 i i i 的代表点即可,如果所有代表点中横坐标最小的那一个在所有的圆内,那么其合法,否则不合法,换言之,答案为 i i i

我们考虑证明这个结论:

  • 若没有交集,则这个点必然不合法,符合我们的预期;
  • 若有交集,则我们需要证明这个点是交集的代表点。
    • 假设其不是交集的代表点,则交集的代表点可能在其左右;
    • 左边:不可能,若交集存在,则代表点的横坐标 ≥ \geq 当前点横坐标。
    • 右边:不可能,考虑当前点在 S a ∩ S b S_a\cap S_b SaSb 中得到,那么所有 x ≥ x\geq x 当前点横坐标的点均被交集抛弃,因此代表点的横坐标 ≤ \leq 当前点横坐标。
    • 由夹逼过程可知结论正确。

这个算法的时间复杂度为 Θ ( n 2 ) \Theta(n^2) Θ(n2)

参考程序

下面我们来解决两圆求交的问题。

下面介绍一下两种方法:余弦定理和相似三角形。

余弦定理

用余弦定理求解需要用到三角函数,常数大,精度差。

我们考虑下图:

2WRtN4.png

△ A C B \triangle{ACB} ACB 运用余弦定理,得到 r a 2 + d 2 − 2 d r a cos ⁡ α = r b 2 r_a^2+d^2-2dr_a\cos\alpha=r_b^2 ra2​</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值