SDUTOJ 1751 - 区间覆盖问题

#include
using namespace std;

int main()
{
    int a[10005];
    // n个点,固定区间长度为k,count_num记录所用区间数
    int n, k, count_num;
    while(cin>>n>>k){
        for (int i = 0; i < n; i++){
            cin>>a[i];
        }
        sort(a, a+n); // 对n个点,升序排序
        count_num = 1; // 默认所用区间数为1
        int tmp = k;
        for (int i = 1; i < n; i++){
            // 目前可用区间足以覆盖两点
            // 则更新可用区间长度
            if (a[i] - a[i-1] <= tmp){
                tmp -= (a[i] - a[i-1]);
            }
            else{
                // 若目前可用区间不足以覆盖两点
                // 则更新目前可用区间长度,且用区间数加一
                tmp = k;
                count_num++;
            }
        }

        cout<<count_num<<endl;
    }
    return 0;
}

你可能感兴趣的:(SDUTOJ刷题,算法实验—贪心算法,c++,算法,贪心算法)