1 条题解
-
0
问题本质
从 个分数 中找出第 小的分数(化简后),不能直接生成所有分数。
核心思路:二分答案
关键观察
- 分数值范围有限:
- 对于候选值 ,可在 时间内计算有多少分数
算法步骤
-
预处理:对数组 和 排序
-
二分搜索:
- 对每个查询 ,二分搜索第 个分数值
- 比较分数时使用 避免浮点数
-
计数函数:
long long count_leq(double x) { long long cnt = 0; // 对每个 b_j,找到最大的 a_i 满足 a_i/b_j <= x // 使用双指针优化 } -
分数化简:找到分数后,用 GCD 化简输出
复杂度
- 预处理:
- 每个查询:,其中 是值域
- 满足 的限制
实现要点
- 使用整数比较避免精度问题
- 注意处理分数相等的情况
- 输出最简分数形式
- 1
信息
- ID
- 5533
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者