1. 程式人生 > 實用技巧 >1751區間覆蓋問題(貪心)

1751區間覆蓋問題(貪心)

Description

設x1, x2,…… , xn是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?
對於給定的實直線上的n個點和閉區間的長度k,設計解此問題的有效演算法,計算覆蓋點集的最少區間數,並證明演算法的正確性。

Input

輸入資料的第一行有2 個正整數n和k(n≤10000,k≤100),表示有n個點,且固定長度閉區間的長度為k。接下來的1 行中,有n個整數,表示n個點在實直線上的座標(可能相同)。

Output

輸出一個整數,表示計算出的最少區間數輸出。

Sample

Input

7 3
1 2 3 4 5 -2 6

Output

3
 1 #include <iostream>
 2
#include <algorithm> 3 #include <string.h> 4 #include <vector> 5 #include <queue> 6 7 #define inf 0x3f3f3f3f 8 9 using namespace std; 10 11 int main() 12 { 13 int n, k, i, cur, num; 14 int a[10005]; 15 cin >> n >> k; 16 for(i=0;i<n;i++) 17 {
18 cin >> a[i]; 19 } 20 sort(a, a+n); 21 cur = a[0] + k; 22 num = 1; 23 for(i=1;i<n;i++) 24 { 25 if(a[i]>cur) 26 { 27 cur = a[i]+k; 28 num++; 29 } 30 } 31 cout << num << endl; 32 return 0;
33 }