Description 刚进入富土康的 Yassin 在进行对 iPhone 的零件设计,众所周知,测量总是有误差的。现在 Yassin 需要对他的误差进行一定的计算。 现在已经给定的图纸中标定了 � n 个零件的大小,我们不妨将其即为 � � a n , 而 Yassin 需要确定一个最小误差 � � � eps, 并用误差范围内的数据来从小到大生产一系列零件。 具体而言,需要确定一个最小的 � � � eps, 使得存在这样一个上升的正整数序列 � � b n , 满足对于任意的 1 ≤ � ≤ � 1≤i≤n, 均有 ∣ � � − � � ∣ ≤ � � � ∣a i −b i ∣≤eps Input 第一行一个数字 � n , 表示图纸的个数。 第二行 � n 个正整数,表示序列 � � a n 。 Output 一行一个正整数,为满足条件的最小的误差
时间: 2024-01-17 09:03:25 浏览: 86
富士康广达双路x79_win10启动卡机驱动
这是一道数学题,可以通过二分答案来解决。具体而言,我们可以二分一个误差范围 eps,然后检查是否存在一个上升的正整数序列 b,使得对于任意的 1 ≤ i ≤ n,都有 |a_i - b_i| ≤ eps。检查的方法可以通过贪心来实现:对于每个 a_i,我们找到最小的满足 b_j ≥ a_i 的 j,然后将 b_j 设为 a_i。如果找不到这样的 j,说明无法构造出合法的序列,此时应该将二分的答案调大。如果能够构造出合法的序列,则说明当前的误差范围可以实现,此时应该将二分的答案调小。重复上述过程直到误差范围收敛到最小。
具体实现时,可以先将序列 a 排序,然后二分 eps 的取值范围,对于每个 eps,检查是否能够构造出合法的序列。检查的过程可以使用一个指针 j 来记录当前的位置,然后依次将 a 中的元素匹配到 b 中,直到找到一个满足 b_j ≥ a_i 的位置 j,然后将 b_j 设为 a_i,继续匹配下一个元素。如果无法匹配,则说明当前的 eps 不合法,应该将二分的上界调高。如果匹配成功,说明当前的 eps 可行,应该将二分的下界调低。最终二分的结果就是最小的合法误差范围。
代码如下:
阅读全文