P17303 [ICPC 2026 Xi'an I] Would You Make a Convex?
题目描述
Yuki 是 国际凸多边形锦标赛(International Convex Polygon Championship, ICPC)的裁判长。他为比赛提出了一道几何题。然而,由于他在几何方面经验不足,未能生成正确的凸多边形数据。
为了证明自己的几何能力,Yuki 再次开始玩起了木棍。他有 $n$ 根木棍,第 $i$ 根木棍的长度为 $a_i$。他打算从中选出至少 $3$ 根木棍,使得这些木棍可以组成一个非退化凸多边形$^\ast$。
然而,由于 Yuki 并不了解几何方面的知识,他不知道应该如何选择木棍。作为 Yuki 的好朋友,你需要帮助他找到木棍的一个子集,使得:
- 该子集中包含至少 $3$ 根木棍,且包含的木棍数量尽可能多;
- Yuki 从该子集中 **任意** 选出至少 $3$ 根木棍,这些木棍都可以组成一个非退化凸多边形。
或报告不存在满足要求的子集。
$^\ast$:所有边长大于零、没有三点共线且所有内角严格小于 $180^\circ$ 的凸多边形被称作非退化凸多边形。
输入格式
本题包含多组测试数据。
第一行包含一个正整数 $t$ $(1 \le t \le 10^5)$,表示测试数据组数。
对于每组测试数据:
- 第一行包含一个正整数 $n$ $(3 \le n \le 5\cdot10^5)$。
- 第二行包含 $n$ 个正整数 $a_1, \dots, a_n$ $(1 \le a_i \le 10^9)$。
保证所有测试数据中 $n$ 的总和不超过 $5\cdot10^5$。
输出格式
对于每组测试数据,输出一行:
- 若不存在满足要求的子集,则输出一个整数 $0$。
- 若存在满足要求的子集,则先输出一个整数 $k$,表示你找到的子集的大小,再输出 $k$ 个整数 $b_1, \dots, b_k$,表示你找到的子集中的 $k$ 根木棍的长度。
说明/提示
对于第 $1$ 组测试数据:
- $\{6,2,6\}$ 为满足要求的子集;由于 $2 + 6 > 6$,这 $3$ 根木棍可以组成一个非退化三角形;容易证明不存在更大的满足要求的子集。
- $\{6,6,9\}$ 同样为满足要求的子集。
对于第 $2$ 组测试数据:
- 可以证明不存在满足要求的子集。
对于第 $3$ 组测试数据:
- $\{3,4,5,6\}$ 为满足要求的子集;此时 Yuki 有 $\{3,4,5\},\{3,4,6\},\{3,5,6\},\{4,5,6\},\{3,4,5,6\}$ 共 $5$ 种选择木棍的方式,而每种选择方式都可以组成一个非退化凸多边形;容易证明不存在更大的满足要求的子集。
- $\{3,4,5,6,9\}$ 不为满足要求的子集,因为长度为 $3,4,9$ 的木棍无法组成一个非退化三角形。
- $\{3,5,6\}$ 不为满足要求的子集,因为存在更大的满足要求的子集。