题意
给定一个数列 $ 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;
}
标签:int,题解,yLOI2023,P9064,两数,竹林
From: https://www.cnblogs.com/YttriumWillow/p/17124331.html