Codeforces Round #744 (Div. 3) 题解(A-F)
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^{\rightarrow1}\)。那么对于\(p\)中的每一个1,它变成0的最小操作数等于它和它前面最近的0的距离,如果前面没有0就拿最后一个0。置换的答案等于所有1变成0所需操作数的最大值。
G. Minimal Coverage
还没想出来
吐槽
宿舍实在是住不下去了,溜了溜了自己租个房子,刚好国庆搬家,房租死贵,但是搬完整个人都舒服了