#P14859. [OOI2026 资格赛]Playing Go下围棋

    ID: 14075 传统题 4000ms 1024MiB 尝试: 4 已通过: 1 难度: 8 上传者: 标签>CF2400计算几何凸包枚举搜索旋转卡壳

[OOI2026 资格赛]Playing Go下围棋

题目描述

给定平面上的 nn 个点。其中一些点是白色的,一些点是黑色的。没有两个点重合,也没有三个点共线。

你需要移动其中一个白点,移动距离不超过 rr,使得操作之后所有点形成的凸包面积最大。

输入格式

每个测试包含多组测试用例。第一行包含一个整数 tt1t10001 \le t \le 1000),表示测试用例数量。

接下来描述每个测试用例。

每个测试用例第一行包含两个整数 n,rn,r3n20003 \le n \le 20001r1091 \le r \le 10^9),表示点的数量以及白点最大移动距离。

接下来 nn 行描述点。第 ii 行包含三个整数 xi,yi,cix_i,y_i,c_i109xi,yi109-10^9 \le x_i,y_i \le 10^91ci21 \le c_i \le 2),表示第 ii 个点的坐标和颜色。ci=1c_i=1 表示白点,ci=2c_i=2 表示黑点。

保证每个测试中所有测试用例的 nn 之和不超过 20002000

输出格式

对每个测试用例,单独输出一行,表示如果可以移动任意一个白点且移动距离不超过 rr,操作之后所有点凸包面积的最大值。

若你的答案的绝对误差或相对误差不超过 10610^{-6},则认为正确。形式化地说,设你的答案为 aa,评测答案为 bb,当且仅当

abmax(1,b)106\frac{|a-b|}{\max(1,|b|)} \le 10^{-6}

时,答案被接受。

样例

样例输入 1

1
3 1
0 0 1
1 0 1
0 1 1

样例输出 1

1.20710678118655

样例输入 2

1
9 6
2 10 2
5 7 2
9 8 1
6 4 2
4 9 2
2 1 2
9 7 2
5 9 2
3 8 2

样例输出 2

59.34731931759172

样例输入 3

1
9 1
8 7 1
1 9 1
3 9 1
4 2 1
7 4 1
10 5 1
3 7 1
4 4 1
7 6 1

样例输出 3

37.42442890089805

样例解释

原题给出了三个样例的示意图。图中虚线表示新凸包的边,实线表示旧凸包的边以及新旧凸包共有的边,蓝色箭头表示白点的最优移动方向。

【图片占位】此处应插入原题中的样例 1、样例 2、样例 3 几何示意图。

计分方式

测试数据包含九个测试组。只有当某组所有测试点以及该组要求的若干前置组均通过时,才能获得该组分数。注意,某些测试组不一定要求通过样例测试。离线测试表示该组测试结果会在比赛结束后才可见。

n\sum n 表示该测试中所有测试用例的 nn 之和。

组别 分数 n\sum n 前置组 备注
0 - 样例
1 11 n3\sum n \le 3 0 -
2 18 n30\sum n \le 30 0,1
3 6 n50\sum n \le 50 0,1,2
4 13 n200\sum n \le 200 - 所有在凸包上的点都是黑点
5 14 0-4 -
6 8 n500\sum n \le 500 4 所有在凸包上的点都是黑点
7 0-6 -
8 12 n2000\sum n \le 2000 4,6 所有在凸包上的点都是黑点;离线测试
9 11 0-8 离线测试