首页 > 试题广场 >

三角谜题

[编程题]三角谜题
  • 热度指数:2189 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}对于给定的 n 种长度的棍子,第 i 种棍子的长度为 l_i ,有 a_i 根。从中任选三根,能组成的等腰三角形的面积最大值为多少?
\hspace{15pt}如果无法组成等腰三角形,则直接输出 -1

输入描述:
\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^6 \right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入一个整数 n \left( 1\leqq n \leqq 10^6 \right) 代表棍子的种类。
\hspace{15pt}此后 n 行,第 i 行输入两个整数 l_i, a_i \left(1 \leqq l_i, a_i \leqq 10^9 \right) 代表第 i 种棍子的长度和数量。

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 10^6


输出描述:
\hspace{15pt}在一行上输出一个实数,代表组成的最大等腰三角形的面积。如果无法组成等腰三角形,则直接输出 -1

\hspace{15pt}由于实数的计算存在误差,当误差的量级不超过 10^{-6} 时,您的答案都将被接受。具体来说,设您的答案为 a ,标准答案为 b ,当且仅当 \frac{|a-b|}{\max(1,|b|)}\leqq 10^{-6} 时,您的答案将被接受。
示例1

输入

2
3
3 3
2 1
3 1
2
1 2
12 1

输出

3.89711431702997391060
-1

说明

\hspace{15pt}对于第一组测试数据,可以构造 2 为底、3 为腰的三角形,面积 \approx 2.83 ;也可以构造 3 为底、3 为腰的三角形,面积 \approx 3.90 。显然,后者更大。

备注:
\hspace{15pt}本题数据量较大,我们建议您使用较快的读入方式。
头像 番禺小韭菜
发表于 2025-03-04 11:21:24
#include <bits/stdc++.h> using namespace std; typedef long long LL; const LL INF = 0x3f3f3f3f3f3f3f3f; const int N = 1e6 + 10; map<int, int& 展开全文
头像 牛客856751393号
发表于 2025-03-06 23:16:52
根据其他同学的提示和启发,修改了寻找三条边的判断逻辑。但是仍然存在两个问题:1.提交不通过,使用自测数据和C++版的比对,结果是一样的,怀疑可能是系统问题。2.因为第一条的原因,使用input()逐行读取是否会导致超时的问题也无法验证。我看C++版的好像也是逐行读取,运行也很快。(题目特意提醒了较快 展开全文
头像 锦夏挽秋
发表于 2025-04-18 15:14:57
由于题目不保证给出的木棍长度各不相同,所以处理输入时,长度相同的木棍,进行数量叠加。叠加时注意,如果数量超过了3,直接数量改写为3,因为我们只需组合一个三角形,再多没用,而且数量叠加起来还可能爆int。然后题目要求是等腰三角形,因此先选一个最长的边 作为腰(数量至少有2 才有资格),这是因为,如果存 展开全文