题面
感觉这题最水…
显然$ a$越低就越难赢, 而只要每次比赛$ a$之差都在$ k$内就可以赢. 所以每个人都要尽量和第一个$ a$比它大的人比, 如果在n-1场比赛中有一场$ a$的差值大于$ k$就不行, 而且所有比它$ a$小的都不行了(因为都要和它比$ a$还比它小).
于是可以升序排序然后从后往前统计答案.
展开代码
#include<cstdio>
#include<algorithm>
#define re register
#define in inline
#define int long long
using namespace std;
in int read()
{
int s(0),b(0);char ch;
do{ch=getchar();if(ch=='-')b=1;}while(ch<'0'||ch>'9');
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
if(b)return -s;return s;
}
int n,k,a[100005];
signed main()
{
int T=read();
while(T--)
{
n=read(),k=read();
for(re int i=1;i<=n;++i) a[i]=read();
sort(a+1,a+n+1);
re int i=n-1,ans=1;
while(i>=1)
{
if(a[i+1]-a[i]<=k) ++ans;
else break;
--i;
}
printf("%lld\n",ans);
}
return 0;
}