A.Finding Sasuke
发现 为偶数,两两配对取相反数即可
B. A New Technique
通过输入输出,我们可以知道 行 列的大小关系。
可以找到每个元素在原表中对应的行和列,利用 映射就好。
C. Perform Easily
发现一个 可以对应多个 ,我们考虑把每个 排序。
问题即为求这个数列中每个 选一个元素的最小极差。
要保证每个 都出现,我们可以考虑双指针,并记录一下未出现元素的个数 。
当 时,就一直指针左移并统计答案 。
D.Shurikens
第一次fst/kk
考虑维护一个栈,栈内加入的是下标,并未赋值。
把购买操作看成弹栈,并把栈顶代表的下标赋成当前的 。
每次弹栈时,维护一个标记,表示当前栈内元素曾经的最小值。
由于只会在弹栈中考虑判定大小,所以加在栈顶就好了。
不合法有两种情况:
-
当前栈为空。
-
栈顶标记 > 当前元素,说明栈内有比最小值还小的元素。
之后模拟就好了,复杂度 ,也不需要离线和倒推。
更新标记时一定要和原本的标记取max!!!
E.Solo mid Oracle
结论题。
首先无限的情况很好判定,只要 就行。
考虑最大的伤害一定是在某一次攻击后的瞬间,所以我们只要找到最后一次攻击是第几次即可。
不难发现,在 秒前,我们这次伤害都能打掉敌人血,而这之后则不然。
我们要在这段时间内尽可能创造出最大伤害,否则相当于没打。
这之间我们最多能打 次,造成的伤害 。
最后答案扣除敌人恢的血就好了,这一段时间内敌人一直在回血。
(这里再看看 cf 的题解)