Description
设 x1, x2, …, xn 是实直线上的 n 个点. 用固定长度的闭区间覆盖这 n 个点, 至少需要多少个这样的固定长度闭区间?
本题对于实数轴上给定的 n 个点和闭区间的长度 k, 计算覆盖点集的最少区间数.
Input
有多个测试用例. 每个测试用例的第一行有两个正整数 n 和 k, 表示有 n 个点且固定长度闭区间的长度为 k. 接下来的一行中有 n 个整数, 表示在实数轴上 n 个点的坐标(可能相同).
输入直至没有数据为止.
Output
对于每个测试用例, 在一行上输出最少区间数.
Sample Input
7 3
1 2 3 4 5 -2 6
Sample Output
3
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n, k;
while(cin>>n>>k){
int a[n];
int num = 1;
for(int i = 0;i < n;i++)
{
cin>>a[i];
}
sort(a, a+n);
int t = a[0];
for(int i = 1;i < n;i++)
{
if(a[i] > t + k)
{
t = a[i];
num++;
}
}
cout<<num<<endl;
}
return 0;
}