#include<bits/stdc++.h>
using namespace std;
const int max_n=10000;
int n,r,x[max_n];
void solve(){
sort(x,x+n); //x数组输入可能无序
int i=0,ans=0;
while(i<n){
int s=x[i++]; //s是没有被覆盖的最左的点的位置
//一直向右前进知道距离s的距离大于r的点
while(i<n&&x[i]<=s+r)i++;
//p是新加上标记的点的位置
int p=x[i-1];
//一直向右前进知道距离p的距离大于r的点
while(i<n&&x[i]<=p+r)i++;
ans++;
}
cout<<ans<<endl;
}
int main(){
while(cin>>n>>r){
if(r==-1&&n==-1) break;
for(int i=0;i<n;i++){
cin>>x[i];
}
solve();
}
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交