| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 39801 | Chasing2575 | 【S】T1 | C++ | 通过 | 100 | 172 MS | 1108 KB | 1298 | 2026-02-02 15:04:16 |
#include <bits/stdc++.h> using namespace std; int t,n,k,a[100005],f[100005]; struct node{ int val,num; }b[100005]; int main(){ cin>>t; while(t--){ memset(f,0,sizeof(f)); cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n); int cnt=1,pos=0; for(int i=2;i<=n;i++){ if(a[i]==a[i-1]) cnt++; else b[++pos].val=a[i-1],b[pos].num=cnt,cnt=1; }b[++pos].val=a[n],b[pos].num=cnt; int ans=0,minn=1; f[1]=b[1].num; for(int i=2;i<=pos;i++){ if(b[i].val-b[i-1].val<=1&&b[i].val-b[minn].val<=k){ f[i]=f[i-1]+b[i].num; }else if(b[i].val-b[i-1].val>1){ ans=max(ans,f[i-1]); minn=i; f[i]=b[i].num; }else{ ans=max(ans,f[i-1]); minn++; f[i]=f[i-1]-b[minn-1].num+b[i].num; } } // for(int i=1;i<=pos;i++) cout<<b[i].val<<' '; // cout<<'\n'; // for(int i=1;i<=pos;i++) cout<<b[i].num<<' '; // cout<<'\n'; // for(int i=1;i<=pos;i++) cout<<f[i]<<' '; // cout<<'\n'; ans=max(ans,f[pos]); cout<<ans<<'\n'; } return 0; }