P9064 [yLOI2023] 苦竹林 题解

洛谷 P9064 [yLOI2023] 苦竹林

题意

给定一个数列 $ a $, 找一个最小的整数 $ ε $ ,使得 $ a $ 存在一个长度为 $ m $ 的子数列(可以不连续) $ b \(,\) b $ 中任意两数之差的绝对值小于等于 $ ε $ 。

思想

这题比 T1 还简单欸。
因为 $ b $ 不连续,所以对该数组排序后不会影响我们的操作。
任意两数之差的绝对值 $ \leq ε $,所以只需最大值最小值之差 $ \leq ε $ 即可。
选择排序后数组的长度为 $ m $ 的区间,求所有区间的极值之差最小值即可。

代码

int main()
{
    scanf("%d%d", &n, &m);
    for (reg int i = 1; i <= n; ++i)
        scanf("%d", &a[i]);
    sort(a + 1, a + n + 1);
    for (reg int i = m; i <= n; ++i)
    {
        int x = a[i] - a[i - (m - 1)];
        if (x < ans)
            ans = x;
    }
    printf("%d\n", ans);
    return 0;
}
posted @ 2023-02-15 19:01  YttriumWillow  阅读(157)  评论(0)    收藏  举报