《Gas Stations》题目分析
这道题中已有的N个加油站是不能移动的,所以相当于把整条高速公路分成了N-1个区间。
并且由于每个区间的两端是固定的,所以每个区间中新建的加油站应该等距分布。比如在[2, 11]之间建2个加油站(2和11已经有加油站),显然建在5和8的位置最优。
于是每个区间中新建的加油站的数量就决定了它们的位置,也决定了区间中两两加油站的距离。
在此基础上,这道题有两种做法。
第一种是贪心。我们考虑分成K次,每次增加一个加油站。那么新加的加油站应该处于哪个区间呢? 显然应该处于“最稀疏”的区间,也就是两两距离最大的区间。
于是我们可以用堆来维护每个区间中加油站的“稀疏”程度,每次O(logN)选出最稀疏的区间,加入一个加油站,再重新计算稀疏度。总复杂度是O(KlogN)的。
第二种是二分答案。假设新建K个加油站的答案是F(K),那么函数F(x)显然是单调递减的,也就是新建的加油站最多,答案越小。
于是我们可以用二分答案来求解。假设加油站之间的距离不少于d,那么我们可以根据d求出每个区间中最多新建多少加油站。如果总数小于K,说明答案比d小,否则说明答案不小于d。
直到二分的d的上下界之差足够小时,d即为答案。
统计转换的时候不要用int强制转换,用ceil 血的教训