链接:https://ac.nowcoder.com/acm/contest/20960/1038
来源:牛客网
来源:牛客网
题目描述
你的团队中有 nnn 个人,每个人有一个能力值 aia_iai,现在需要选择若干个人组成一个团队去参加比赛,由于比赛的规则限制,一个团队里面任意两个人能力的差值必须要小于等于 kkk ,为了让更多的人有参加比赛的机会,你最多能选择多少个人参加比赛?
输入描述:
第一行一个整数 TTT,表示案例组数。
每个案例有两行:
第一行两个正整数 n,kn,kn,k ,表示人的数量。
第二行n个以空格分隔的整数 aia_iai ,表示每个人的能力值。
输出描述:
每个案例输出一行,表示可以参加比赛的最多人数。
示例1
输入
1 5 3 8 3 5 1 6
输出
3
说明
选择能力值为 3,5,63,5,63,5,6 或者 5,6,85,6,85,6,8将原序列排序后可以发现结果一定是排序后的某个连续的序列。所以使用尺取法即可快速解出。
#include <bits/stdc++.h> using namespace std; const int MAXN = 2e5; int a[MAXN]; int main() { 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 l=0, r=0; int cnt = 0, ans = 0; while (l<=r&&l<n&&r<n) { if (a[r]-a[l]<=k) { cnt++; ans = max(ans, cnt); r++; } else { l++; cnt--; } } cout<<ans<<endl; } return 0; }