求教
  • 板块学术版
  • 楼主lzdqwq
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/5/31 20:00
  • 上次更新2024/5/31 21:44:05
查看原帖
求教
1155979
lzdqwq楼主2024/5/31 20:00

题目描述 六一即将到来,为了迎接节日的到来,准备举办彩绘活动。活动安排如下:学校准备了一条10000米的白布条,可以看成x轴上的0至10000。你需要用喷枪将颜料喷到白布条上,喷枪最远能喷到的距离为a,其中a为正整数,当然你既可以向左边喷,也可以向右边喷。目标就是将整个白布条喷上彩绘。现在白布条上有n个位置可以站立(每个站立点也是整数)。 现在需要你求出最少需要站在几个位置才能将整个白布条喷上彩绘。

输入 第一行两个整数n和a。分别表示可以站的点位个数以及喷枪最远能喷到的距离为a。

第二行n个数,分别表示可以站的点位坐标。

输出 一个数,表示将整个白布喷上彩绘最少需要站在几个位置。

样例输入 5 5000 0 1000 6000 2000 5000 样例输出 1 样例说明 只需要站在5000这个位置即可。向左可以喷到0-5000,向右5000-10000。因此只需要一个位置。

数据说明 题目保证有解。

0<=n<=10000

0<=a<=10000

我的代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,a,cnt=0;
	cin>>n>>a;
	vector<int> p(n);
	for(int i=0;i<n;i++) cin>>p[i];
	sort(p.begin(),p.end());
	int r=-a;
    for(int i:p){
        if(i>r+a){
        	r=i+a;
            cnt++;
        }
        else r=max(r,i+a);
    }
    cout<<cnt;
    return 0;
}

请各位大佬来帮助本位蒟蒻

急!

2024/5/31 20:00
加载中...