CF814D An overnight dance in discotheque

题目描述

即使舞厅里人山人海,也不会阻止我们的朋友们尽情娱乐,不过如果能稍微宽敞一点,也不错,不是吗? 可以把舞厅看作一个无限大的 $xy$ 平面,其中共有 $n$ 个舞者。每当某个人开始活动时,他/她只会在自己的活动范围内移动,这个活动范围是一个以 $(x_{i}, y_{i})$ 为圆心、$r_{i}$ 为半径的圆形区域 $C_{i}$。任意两个活动范围的边界至多有一个公共点,也就是说,对于每一对 $(i, j)$($1 \leq i < j \leq n$),活动范围 $C_{i}$ 和 $C_{j}$ 要么没有交集,要么其中一个是另一个的子集。注意,可能会有两个人的活动范围的边界有且仅有一个公共点,但不会有两名舞者的活动范围完全相同。 月火(Tsukihi)把“宽敞度”定义为被奇数个正在移动的舞者的活动范围覆盖的面积。下图中,阴影部分表示如果所有人一起活动时的宽敞度。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF814D/5a49565ef74e61d7b40ab12eaa412e67e7b6d97c.png) 然而,没有人会整个晚上都在移动,因此整晚被分为两半——午夜前和午夜后。每个舞者在其中一个时段活动,在另一个时段和朋友们坐下休息。两段时间的宽敞度分别计算,然后将其求和,当然,这个和应尽可能大。下图展示了上例中的一个最优方案。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF814D/8da25989c38168302d4efff7470ec1e71f4e2366.png) 通过不同的分配策略,决定谁在前半夜活动,谁在后半夜活动,可以得到不同的宽敞度和。你需要计算这个宽敞度和的最大可能值。

输入格式

第一行包含一个正整数 $n$($1 \leq n \leq 1000$)——表示舞者的数量。 接下来 $n$ 行,每行描述一名舞者:第 $i$ 行包含三个用空格分隔的整数 $x_{i}$、$y_{i}$ 和 $r_{i}$($-10^{6} \leq x_{i}, y_{i} \leq 10^{6}$,$1 \leq r_{i} \leq 10^{6}$),表示以 $(x_{i}, y_{i})$ 为圆心、$r_{i}$ 为半径的圆形活动范围。

输出格式

输出一个十进制小数,表示整个夜晚两段时间宽敞度的最大可能和。 如果你的结果的相对或绝对误差不超过 $10^{-9}$,则认为答案正确。形式化地说,设你的答案为 $a$,标准答案为 $b$,如果满足 $|a - b| \leq 10^{-9} \max(1, |b|)$ 则你的答案被认为是正确的。

说明/提示

第一个样例对应说明中的示意图。 由 ChatGPT 5 翻译