Edu CF Round 142 A & B & C

A. GamingForces
Monocarp 正在玩一个电脑游戏,需要杀死 n 只怪兽,每只怪兽有一个生命值 ,Monocarp 有两种技能,第一种是选择两只怪兽,各扣一滴血,第二种是选择一只怪兽,直接杀死,问 Monocarp 最少需要释放几次技能才能杀死所有怪兽。
思路:
首先对于所有生命值为 1 的怪兽,肯定是释放第一种技能比较好,因为释放一次最多能杀死两只,释放 次就可以杀死所有生命值为 1 的怪兽,而对于生命值不为 1 的怪兽,肯定是选择直接杀死更优,因为两次第一种技能可能不一定能杀死两只怪兽,但是两次第二种技能一定能杀死两只怪兽。因此需要释放的技能次数为:
,其中 one_cnt 是生命值为 1 的怪兽的数量,除法是整除。
B. Stand-up Comedian
Eve 是一个入门喜剧表演家,她准备了四类节目,分别有 个,现在她要邀请朋友 Alice 和 Bob 来欣赏她的表演。A 和 B 初始时有一个情绪值 0,观看到不喜欢的表演,情绪值会减一,看到喜欢的表演,情绪值会加一,当某个人情绪值小于 0,那么就会离开。在Eve 准备的四类节目中,第一类是 A 和 B 都喜欢的,第二类是 A 喜欢 B 不喜欢,第三类是 A 和 B 都不喜欢的。问 Eve 在 A 和 B 有人离开之前最多能表演多少节目。
思路:
首先肯定直接表演第一类节目,A 和 B 的情绪值都变为 . 接着,注意到表演的节目数量是受制于两人中情绪值低的,而第二类和第三类节目都属于此消彼长的类型,因此应该先平衡两人的情绪值,第二类和第三类节目轮流表演,可以表演
个节目,然后两人的情绪值仍然和初始相同。接着可以表演第四类节目,如果
,那么最多再表演
个节目,如果
,那么可以先表演完第四类节目,然后再表演剩下的第二或第三类节目,有
个,如果
,那么就表演完了所有节目,否则,可以再表演
个节目,到此就结束了。
但是需要注意的是,如果一开始第一类节目的数量是 0,那么就没有后面的步骤了,因此需要特判。
C. Min Max Sort
给出一个数字 1 - n 的排列,可以对它进行任意次如下操作:任选两个元素 x, y,把其中小者移动到排列头部,大者移动到排列尾部。问经过至少多少次这样的操作,排列按照升序排列。
思路:
首先构造性地给出一个方法,对于任意排列,用 次一定能完成:每次选择最靠近 1 - n 的中位数且之前没被选中过的两个数,直到最后一步选择 1 和 n. 接下来来看操作序列的性质,反着来看,最后一步一定选择的是 1, n, 前一步是 2, n-1, 以此类推,如果 k 步操作之后排列是单调递增的,那么有这样的性质:把最后 k 步选择的元素都删除,剩下的是一个有序的序列。而且我们知道,如果一个 k 满足这样的性质,那么 k+1, k+2, .... 也满足这样的性质,因此存在单调性,可以二分答案。每次 check 只需要判断删除了前 k 小和前 k 大的元素之后,剩下的元素是否有序即可。