我的代码(我找不到bug)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, m;
int a[N];
int ans = 0x3f3f3f3f;
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a + 1, a + n + 1);
int j = 1, end = min(n, m + 1);
for (int i = 1; i <= end; i++)
{
j = max(i, j);
while ((i - 1) + (n - j) + min(i - 1, n - j) > m)
j++;
ans = min(ans, a[j] - a[i]);
}
cout << ans;
}
kkksc03题解代码
#include<bits/stdc++.h>
#define up(l, r, i) for(int i = l, END##i = r;i <= END##i;++ i)
#define dn(r, l, i) for(int i = r, END##i = l;i >= END##i;-- i)
using namespace std;
typedef long long i64;
const int INF = 2147483647;
int qread(){
int w=1,c,ret;
while((c = getchar()) > '9' || c < '0') w = (c == '-' ? -1 : 1); ret = c - '0';
while((c = getchar()) >= '0' && c <= '9') ret = ret * 10 + c - '0';
return ret * w;
}
const int MAXN = 1e5 + 3;
int A[MAXN], ans = INF;
int main(){
int n = qread(), m = qread();
up(1, n, i) A[i] = qread();
sort(A + 1, A + 1 + n);
int j = 1;
up(1, min(n, m + 1), i){
j = max(i, j);
while((i - 1) + (n - j) + min(i - 1, n - j) > m) ++ j;
ans = min(ans, A[j] - A[i]);
}
printf("%d\n", ans);
return 0;
}