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

还没想出来

吐槽

宿舍实在是住不下去了,溜了溜了自己租个房子,刚好国庆搬家,房租死贵,但是搬完整个人都舒服了

posted @ 2021-10-01 23:57  _Backl1ght  阅读(71)  评论(0编辑  收藏  举报