竞赛
考级
本次挑战赛没有橙色难度,不过我觉得这题给个黄难度稍微高了点,给橙正好。 话不多说,我们先上题解: 这道题目可以很明显看出是贪心,从小到大的将源石虫能跑的距离排序,然后每次枚举选出大于需求路程的最小bi即可,接着把选出来的源石虫删掉(由于c++自带的数组删除不了元素所以将其路程设为0,虽然会略微增加时间复杂度但对这题AC没啥影响),如果没有满足条件的源石虫,那就直接输出no和遍历次数i了。 注意,这里使用i遍历时,i的初始值应为1,因为我们是用i表示通过的点的。 AC代码奉上:
xiabo
大家的解法基本上是 O(n2)O(n^2)O(n2)的,这里给一个 O(nlog(n))O(n \log(n))O(nlog(n))的做法 对于每个位置,我们的目标是找出所有鼹鼠中能够适用且能力值最小的那一只。为了高效地实现这一目标,我们只需维护一个特定的数据结构,该结构要具备快速查找所需数据的能力。 在具体的数据结构选择上,有两种不错的方案。其一,我们可以采用动态开点的权值线段树,并在其上进行二分查找操作;其二,也可以使用 set 容器,利用其内部自带的二分查找功能。
hopebetter
优先分配更菜的源石虫,枚举所有接力点,找到第一个合适的位置即可。 AC Code:
亚洲卷王 AK IOI