Loading

Codeforces Contest 1525

A. Potion-making

直接输出约分后的分母即可。

B. Permutation Sort

这玩意看起来就不用很多次,如果本来就是有序的那么就是 \(0\),如果 \(a_1=1\)\(a_n=n\) 那么显然只用 \(1\) 次。如果 \(a_n=1\)\(a_1=n\) 那么显然需要 \(3\) 次,否则 \(2\) 次即可。

C. Robot Collisions

容易发现这东西和国际象棋里黑白象是类似的,奇数位置的不会和偶数位置的相撞,那么只用考虑奇偶性相同的点。然后只用使用一个栈来维护向右的点,如果只有一个向左的点在 \((x,0)\),我们可以把其看成一个在 \((-x,0)\) 的向右的点。最后再处理剩下所有向右的点,两两配对即可。

D. Armchairs

贪心是不对的,可以找到反例。这个时候看到数据范围我们想到dp,设 \(f_i\) 代表前 \(i\) 部分的答案,那么显然有 \(f_i=min(f_j+w(j+1,i))\),其中必须满足所有 \(1\) 都被 \(0\) 匹配,而 \(0\) 可以多于。接下来考虑计算 \(w(j+1,i)\),可以贪心计算,把最后的 \(1\) 与最后的 \(0\) 匹配即可。

E. Assimilation IV

根据期望的线性性我们只用考虑每个点的期望次数,即其概率。正难则反,考虑出现不了的概率。把所有可以使其出现的城市找出来,每次可以选一段后缀,将可以选的位置数乘起来,剩下的随便选,于是就做完了。

F. Goblins And Gnomes

首先发现这是个最小链覆盖,而最小链覆盖等于点数-二分图最大匹配,那么我们就是想要匹配尽量小。我们可以进行的一次操作就是找到一个点,然后把这点删了。显然,我们需要找到一个匹配的公共点,而这个点是一定存在的,不然匹配会加一。这个点很好找,预处理出最大独立集,然后在补集里删一个就好。考虑删点顺序,其实就是每次删多少点。这个直接 dp 就好了,总的复杂度是 \(O(n^3)\)

posted @ 2021-05-17 13:32  Gemini7X  阅读(45)  评论(0编辑  收藏  举报
Title