贪心法-百练4110
/*设x1,x2,... ,xn是实直线上的n个点。用固定长度的闭区间覆盖这n个点,至
少需要多少个这样的固定长度闭区间?设计求解此问题的有效算法。对于给定的实
直线上的n个点和闭区间的长度k,编程计算覆盖点集的最少区间数。
输入格式:
输入数据的第一行有2个正整数n和k,表示有n个点,且固定长度闭区间的长度为
k。接下来的1行中,有n个整数,表示n个点在实直线上的坐标(可能相同)。
*/
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,k;
cin>>n>>k;
int a[100];
for(int i=0;i<n;i++)
cin>>a[i];//接受输入
int i=0;
int cnt=0;
sort(a,a+n);
while(i<n){
if(a[i]+k>=a[i+1]){
int j=0;
while(a[i+j]-a[i]<=k)
j++;
i+=j;
cnt++;
}
else{
cnt++;
i++;
}
}
cout<<cnt;
}

浙公网安备 33010602011771号