A. Casimir's String Solitaire
两个操作中B是重合的,所以看A的个数加C的个数等不等于B的个数
B. Shifting Sort
注意到(n)比较小,所以可以比较暴力,类似于选择排序,每次找到第(i)小的元素,然后想办法把它搞到第(i)个位置。
假设第(i)小位于(j),那么通过i j j - i
就可以把第(i)小搞到第(i)个位置。
C. Ticks
注意到没有限制一个格子不能被画多次,那么就可以对于每一个格子,在满足条件的前提下画最大的tick,看能不能得到原图。
D. Productive Meeting
假设(a)升序排序之后得到(b)。
有一个非常显而易见的结论:假设(b_n > sum_{i = 1} ^ {n - 1}b_i),那么将前(n-1)个人都跟第(n)个人单聊是最优的。
但是有可能不满足上面的条件,这个时候可以让前(n-1)个人内部单聊,一次单聊可以使和减2,一旦减到小于(b_n),就用上面的结论。
又因为每次前(n-1)个人内部单聊都只会使和减2,所以这样操作肯定使最优的。
E1. Permutation Minimization by Deque
贪就完了。
首先将(a_1)入队,这个时候无所谓从前还是从后。
然后就贪心,如果(a_i)比队首小就头插,否则就尾插。
E2. Array Optimization by Deque
贪就完了。
头插,逆序对数增加队列中比(a_i)小的元素个数。
尾插,逆序对数增加队列中比(a_i)大的元素个数。
贪心取二者中较小值。
元素个数随便拿个平衡树维护一下就完事了。
F. Array Stabilization (AND version)
首先,每次操作相当于一次置换,所以最终可以分为一个或者多个不相交的子置换,问题也可以分别解决,即整体的答案为所有子置换答案的最大值,如果有一个子置换无解,则整体的答案也无解。
对于一个子置换,这个子置换无解当且仅当这个置换对应元素均为1。
否则,对于置换(p),原操作相当于(p & p^{ ightarrow1})。那么对于(p)中的每一个1,它变成0的最小操作数等于它和它前面最近的0的距离,如果前面没有0就拿最后一个0。置换的答案等于所有1变成0所需操作数的最大值。
G. Minimal Coverage
还没想出来
吐槽
宿舍实在是住不下去了,溜了溜了自己租个房子,刚好国庆搬家,房租死贵,但是搬完整个人都舒服了