关于三角形

只需小学 \(2\) 年级的水平就可以看懂。

引入

给定一个序列 \(a_1 \sim a_n(1 \le a_i \le 10^9)\),查询能否选 \(3\) 个不同的数,使得这三个数的值能组成三角形。

结论:若 \(n \ge 45\),必有解。

证明:设三个数为 \(A \le B \le C\),若它们不能组成三角形,有 \(C \ge A + B\)

那么将数组 \(a\) 排序后,若无解,则有 \(a_i \ge a_{i - 1} + a_{i - 2}(i \ge 3)\),那么 \(a_i \ge f_i\)\(f\) 为斐波那契数列。

因为 \(a_i \le 10^9, f_{45} = 11,3490,3170(f_1 = f_2 = 1)\),所以 \(n \ge 45\) 必有解。

总之,若 \(n \ge p\)\(f_p > V\),则必有解。

进阶

若要选出 \(3(k + 1)\) 个不同的数,组成 \(k + 1\) 个三角形呢?

结论: \(n \ge p + 3k\) 必有解。

证明:考虑归纳

对于 \(k = 0\),成立。

若对于 \(k = x\) 成立,下面证明 \(k = x + 1\) 成立

\(n \ge p + 3(k + 1) > p + 3\),可知一定可以找到一个三个数凑出一个三角形,去掉这三个数,剩余至少有 \(p + 3k\),有归纳假设可以凑出 \(k\) 个三角形,共 \(k + 1\) 个。

所以对于 \(n\) 较大时,直接输出 Yes 跑路即可。否则解暴力吧。

但是暴力也是又讲究的。将 \(a\) 排序后,不难发现三个数靠的越紧,越容易组成三角形。

所以组成三角形的三个数肯定挨在一起。除非很多个三角形混在一起,如 \([{\color{red}{3}} \ 4 \ {\color{red}{8 \ 8}} \ 9 \ 12 ]\)

posted @ 2025-08-28 12:07  xiehanrui0817  阅读(30)  评论(0)    收藏  举报