A
- 容易发现由于玩家是八向移动,-1以及其上的硬币都可以接到,但是往下都无法。
B
- 子序列不需要连续,子串则必须连续,那么我们可以考虑对子串进行遍历,相当于遍历起点,求出子序列能和其对上的最大长度,然后用子串长度加上子序列的长度减去重合长度即可。
C
- 赛时C没D出的快,想贪心策略想岔劈了。我们注意到选择的顺序其实不影响结果,那么我们当然可以先将显而易见的贪心求出,也就是两者的投票不相等的部分,之后我们将相等的1个数和-1个数分别计数,遍历着分给二者即可,谁小补谁,谁大减谁。
D
- 其实可以发现所谓融化再铸造的过程就是将原材料减去两者之差的过程,那么我们可以小贪一下,对于融化代价更高的选项,如果它的熔铸差并不是融化代价小于等于它的选项集合中的最大值,那么其实它没有什么意义,可以直接从数组中踢出。之后我们考虑从小到大构造出一张表,因为每个原材料个数对应的可获得经验值都是固定的,而且可以从更小的原材料个数状态中推出,只需要二分查找一下与其最近的、代价小于等于其个数的融化代价项即可。然后对于那些原材料个数大于1e6的c[i]来讲,我们完全可以在O(1)的时间内求出它转移到融化代价最大的那个状态获得的经验值。
E
- 待补。
F
- 待补。