题目描述
查看题目信息
已知n盏灯以及每盏灯的位置p[i],p[i]均不相等,两盏相邻的灯当不大于dist时,若这个安全距离里面还有灯是亮着时,就可以关掉该盏灯,(即若第i-1盏与第i+1盏的距离<=dist,则可以关掉第i盏)求在保证洞里的光线是充足的情况下,一段区域里能删除的灯的最大值。
距离洞口最近和最远的两盏灯必须是亮着
输入格式
第一行两个数,n和dist
第二行n个数,即每盏灯的位置
输出格式
一个数,即一段区域里能删除的灯的最大值。
鲜例输入
3 3 1 2 3
样例输出
1
问题提示
n<=100000
解题思路:
贪心
这道题我们使用贪心的思路,怎么贪也比较简单,只需要先利用样例计算,把题读懂,i-1和i+1的距离不超过dist,所以能列出此公式a[i-1]-a[i+1]<=dist(记着加绝对值),用cnt来计数,每一次(公式)就cnt++,最后再把a[i]=a[i-1]就好了。上代码
#include <bits/stdc++.h>
using namespace std;
int a[10000010];
int main()
{
int n,m,cnt=0;
cin >> n >>m;
for(int i=1;i<=n;i++)
{
cin >> a[i];
}
sort(a+1,a+n+1);
for(int i=2;i<=n-1;i++)
{
if(abs(a[i-1]-a[i+1])<=m)
{
cnt++;
a[i]=a[i-1];
}
}
cout << cnt;
return 0;
}