题意:给你n个长为k的横木,并给出左坐标,如果两个横木能都有重叠部分或临界的话,那么这两个横木就可以互相跳跃,问能形成多大的环
思路:排序后,假设当前的i是环里的,如果满足 x[i+1]-x[i-1]<=k && x[i+1]-x[i]<=k 的话,那么i+1块也可以加进环里
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 6000;
int x[MAXN],k,n;
int main(){
int t;
scanf("%d",&t);
while (t--){
scanf("%d%d",&n,&k);
for (int i = 1; i <= n; i++)
scanf("%d",&x[i]);
sort(x+1,x+1+n);
int i = 1;
int ans = 0;
while (i <= n){
int pre = i;
int cnt = 1;
while (i < n && (cnt == 1 || x[i+1]-x[i-1] <= k) && x[i+1]-x[i] <= k)
i++,cnt++;
if (pre == i)
i++;
ans = max(ans,cnt);
}
printf("%d\n",ans);
}
return 0;
}原文:http://blog.csdn.net/u011345136/article/details/19021743