学校里有一条超长的走廊,可以看成是一条直线。走廊里一共有 nn 盏电灯,每盏电灯的位置为 a_iai。为了响应国家的号召节约用电,校长决定关掉几盏电灯,仅维持走廊的基本光照。具体规则是,如果某盏灯的左右两盏灯距离不超过 mm,就可以把这盏灯关闭。其中头尾两盏灯不允许关闭。
现在请你计算最多能关掉多少盏灯。
输入格式
第一行两个整数 n,m\ (2\le n\le 10^5,1\le m \le 10^6)n,m (2≤n≤105,1≤m≤106),分别表示电灯的盏数和最大距离 mm。
第二行 nn 个整数,表示每盏灯的位置 a_i\ (1\le a_i \le 10^6)ai (1≤ai≤106)。
输出格式
一个整数,表示最多关掉电灯的数量。
Sample 1
Inputcopy | Outputcopy |
---|---|
4 5 3 6 10 1 | 1 |
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
int last=a[0];
int ans=0;
for(int i=1;i<n-1;i++)
{
if(a[i+1]-last<=m)
ans++;//每次都把中间的删去
else
{
last=a[i];
}
}
cout<<ans;
return 0;
}
只需要每次比较相隔一个点的距离即可,这样才能得到是否<=m
如果是就加入ans,不是就刷新前一个点的位置