NC204859 组队

题目

题目描述

你的团队中有 n 个人,每个人有一个能力值 ai,现在需要选择若干个人组成一个团队去参加比赛,由于比赛的规则限制,一个团队里面任意两个人能力的差值必须要小于等于 k ,为了让更多的人有参加比赛的机会,你最多能选择多少个人参加比赛?

输入描述

第一行一个整数 T,表示案例组数。每个案例有两行:第一行两个正整数 n,k ,表示人的数量。
第二行 n 个以空格分隔的整数 ai ,表示每个人的能力值。

输出描述

每个案例输出一行,表示可以参加比赛的最多人数。

示例1

输入

1
5 3
8 3 5 1 6

输出

3

说明

选择能力值为 3,5,63,5,63,5,6 或者 5,6,85,6,85,6,8

备注

T10
1n2e5,1k1e9
1ai1e9

题解

知识点:枚举,双指针,贪心。

注意到任意两人数值差不能大于 k ,因此考虑先按从小到大排序,枚举左端点和右端点,在符合右端点减左端点数值小于等于 k 的情况下加人数,其答案具有单调性,即左端点改变右端点不需要回撤,可以用尺取法。

时间复杂度 O(Tnlogn)

空间复杂度 O(n)

代码

#include <bits/stdc++.h>
using namespace std;
int a[200007];
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
for (int i = 0;i < n;i++) cin >> a[i];
sort(a, a + n);
int ans = 0;
int l = 0, r = 0;
while (l < n) {
while (r < n && a[r] - a[l] <= k) r++;
ans = max(ans, r - l);
l++;
}
cout << ans << '\n';
}
return 0;
}
posted @   空白菌  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示