endless 题解
题目
解题方法
这道题考点是贪心、二分查找和排序。
首先我们设fi表示用i个魔法的最大路程,则我们贪心,每次选最大的那i个魔法最优,因此
fi=l+∑j=1iaj
注意,我们要把a数组先排序再求解。
继续简化上式,可得递推式
fi={fi−1+ail1≤i≤ni=0
那么我们可以用O(n)求出f数组。
-
85分的方法:每一次只要循环找到一个比t大的数,输出它并停止循环,就行了。时间复杂度为O(nq)。
- 满分的方法:我们发现f数组有单调性,所以只要二分答案就行了。时间复杂度为O(qlog2n)。
注意,我们不用除法,直接乘过去就行了。
因为s(路程)除以t(时间)等于v(速度)。
也就是v=ts,可得s=vt。
而现在我们要求ts>v,也就是s>vt。
这样就不用算除法了。
注意,一定要开longlong!!!