题目 30096

静态凸包

查看题解 ↗GitHub ↗如何评测
题号
30096
时间限制
10000 ms
内存限制
1024 MB
标签
计算几何
来源
Library Checker (yosupo06) - static_convex_hull

【题目描述】

本题包含 TT 组测试数据。

给定 NN 个二维点 (xi,yi)(x_i,y_i)(0≤i≤N−10\leq i\leq N-1),令 PP 为这些点的凸包。请按逆时针顺序输出 PP 的顶点坐标。

更详细的定义请参见下面的注释。

注释:

  • 对于二维点的一个(多重)集合 SS,将 SS 的凸包记为 conv(S)\mathrm{conv}(S)。
  • 定义 P=conv({(xi,yi)∣0≤i≤N−1})P=\mathrm{conv}(\lbrace (x_i,y_i)\mid 0\leq i\leq N-1\rbrace)。
  • 可以证明,存在满足 conv(S′)=P\mathrm{conv}(S')=P 的最小集合 S′S'。PP 的顶点定义为 S′S' 中的元素。
  • 当 ∣S′∣≤2|S'|\leq 2 时,以任意顺序输出 S′S' 中的点。当 ∣S′∣≥3|S'|\geq 3 时,可以证明 PP 是一个凸多边形,S′S' 是其顶点,并且可以定义其逆时针顺序。可以旋转这个顺序,若输出的顺序为逆时针方向则均可接受。
  • 根据上述定义,如果点 SS 在 PP 的一条边上但不是顶点,则不应输出该点。
  • 输入中可能包含坐标相同的多个点,但输出中不应包含坐标相同的多个点。

【输入】

输入格式如下:

文本
$T$
$N$
$x_0$ $y_0$
$x_1$ $y_1$
:
$x_{N - 1}$ $y_{N - 1}$
$N$
$x_0$ $y_0$
$x_1$ $y_1$
:
$x_{N - 1}$ $y_{N - 1}$
$\vdots$

【输出】

对于每组测试数据,按照以下格式输出坐标:

文本
$M$
$x'_0$ $y'_0$
$x'_1$ $y'_1$
:
$x'_{M - 1}$ $y'_{M - 1}$

【输入样例】

文本
1
9
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2

【输出样例】

文本
4
0 0
2 0
2 2
0 2

【输入样例2】

文本
4
0
1
1 1
3
1 1
1 1
1 1
4
-2 -2
-1 -1
0 0
0 0

【输出样例2】

文本
0
1
1 1
1
1 1
2
-2 -2
0 0

【数据范围】

  • 1≤T≤1051\leq T\leq 10^5
  • 0≤N≤5000000\leq N\leq 500000
  • ∣xi∣,∣yi∣≤1000000000|x_i|,|y_i|\leq 1000000000
  • xi,yix_i,y_i 为整数。
  • 所有测试数据中 NN 的总和不超过 500000500000

【来源】

Library Checker(yosupo06) static_convex_hull

本题为 special judge(输出任意合法解),暂不可本地评测。

数据下载

题目 30096 的公开数据

正在读取文件列表…

常用命令

题目 30096 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。