P9064

· · 题解

首先,题意可以转换成从 n 个风铃里挑出 m 个,使得它的极差最小。

所以可以直接给数列排序,然后将第 i 个数(1\le i\le n-m+1)分别假设为最小值,那么第 i+m-1 个就是数列 b 最小的最大值,直接相减,并求出最小值即可。

#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int a[100010];
int ans = 2e9;
int main (){
    cin >> n >> m;
    for(int i = 1; i <= n; i ++){
        cin >> a[i];
    }
    sort(a + 1, a + 1 + n);
    for(int i = 1; i <= n - m + 1; i ++){
        ans = min(ans, a[i + m - 1] - a[i]);
    }
    cout << ans;
    return 0;
}