复盘|LCCUP'23 力扣杯春季编程大赛·个人赛
LCP 72. 补给马车
【模拟】O(n^2)模拟,当数组长度大于一半长度时,遍历数组,找到最小的相邻的两个元素,把总和赋给第一个,删掉后一个,重复操作直到满足要求。时间复杂度O(n^2),空间复杂度O(1)。
LCP 73. 探险营地
【哈希表 + 遍历】用哈希表存探测过的营地,遍历的时候记录探测到最多新营地时的下标。
LCP 74. 最强祝福力场
【离散化 + 二维差分】①统计所有左下和右上坐标,由于会出现 0.5,可以将坐标乘 2。②离散化横纵坐标。③二维差分。④复原,计算最大值。
【离散化 + 扫描线 + 线段树动态开点】用二维平面的扫描线算法实现,首先将每个力场看做矩形,并按照其左右边缘的 x 坐标排序。接着使用 set 存储所有可能的 y 坐标,并按照从小到大的顺序排序,得到所有可能的 y 坐标。然后遍历排好序的力场列表,对于每个力场矩形,将其左右两个边界加入线段树中。注意,由于力场范围的边缘也被力场覆盖,因此需要将左边界的值减 1,将右边界的值加 1。最后,遍历完所有力场后,从线段树中找到最大的值即为答案。
LCP 75. 传送卷轴
【预处理 + BFS + DFS + 二分】①遍历找到起点终点位置;②BFS计算终点到其余点的最短距离;③剪枝:如果起点到不了终点返回-1;④二分答案maxDis,看能否在被传送的情况下在maxDis步内到达终点,只要能到达终点,说明答案至多为maxDis,否则答案大于maxDis。
LCP 76. 魔法棋盘
【状压DP + 记忆化搜索】分类讨论有七种B/R状态——TRANS,遍历棋盘就是不断生成B/R序列的过程,向序列末尾添加B和R,这些状态就会互相转换,形成一个7×2的转换关系表,7种情况用3个bit存。写一个记忆化搜索枚举r行,再写一格暴搜来枚举第r行的B/R状态是否合法。