CF645

A. Amity Assessment

模拟即可。

B. Mischievous Mess Makers

每次交换 \(i\)\(n - i + 1\) 即可。

C. Enduring Exodus

二分答案即可。

D. Robot Rapping Results Report

二分答案后拓扑排序即可。

E. Intellectual Inquiry

给你字符集 \(\Sigma\) 和一个长度为 \(m\) 的字符串 \(s\),你需要在 \(s\) 后面加上 \(n\) 个字符,最大化新的字符串的本质不同子序列数量。\(n,m \leq {10}^6\)。2s / 250M。

对于 \(n = 0\) 的情况,问题变为求出原字符串的本质不同子序列数量。发现需要统计的东西没有很好的性质,考虑加强限制。对于每一类本质相同的子序列,我们只在其第一次出现时统计,也就是只在末尾最靠前的那个子序列处统计。举个例子,对于字符串 \(\texttt{abcbac}\),考虑 \(\texttt{abc}\) 这一类,有子序列 \((1,2,3),(1,2,6)\)\((1,4,6)\)。我们只在子序列 \((1,2,3)\) 处统计,其他的就忽视掉。

有了这个性质后,考虑 DP。设 \(f_i\) 表示只考虑前 \(i\) 个字符时本质不同子序列数量。如果 \(s_i\)\(1 \sim i - 1\) 没出现过,那么有 \(f_i = 2 \times f_{i - 1}\),这是因为有选 \(s_i\) 和不选 \(s_i\) 两种情况。如果 \(s_i\)\(1 \sim i - 1\) 出现过,那么就有 \(f_i = 2 \times f_{i - 1} - f_{\text{pre}_i - 1}\)\(\text{pre}_i\) 表示 \(s_i\) 上次出现的位置。这个比较难理解,我们重点解析一下。

首先还是有选和不选两种情况。不选的话答案还是 \(f_{i - 1}\),这个没什么好说的。要是选,由于我们只统计末尾最靠前的子序列。这意味着,所有末尾位于 \([1, \text{pre}_i - 1]\) 的子序列就都不能统计进去。这是因为它们可以选 \(s_{\text{pre}_i}\),这样末尾是更靠前的。所以说这部分要刨去 \(f_{\text{pre}_i - 1}\),总答案就是 \(f_{i - 1} - f_{\text{pre}_i - 1}\),加上前面不选的也就有转移式 \(f_i = 2 \times f_{i - 1} - f_{\text{pre}_i - 1}\)

接下来,我们考虑 \(n > 0\) 的情况。在第二个转移式中,有减去 \(f_{\text{pre}_i - 1}\) 的部分。事实上,我们只需要贪心地填满足 \(f_{\text{pre}_i - 1}\) 最小的字符即可。

时间复杂度可以做到 \(O(m + n \lvert \Sigma \rvert )\)\(O(m + n \log { \lvert \Sigma \rvert } )\)。容易通过矩阵快速幂优化至 \(O(m + { \lvert \Sigma \rvert } ^ 3 \log n)\)

F. Cowslip Collections

莫反题,先略过。

G. Armistice Area Apportionment

posted @ 2025-08-28 17:28  Eliauk_FP  阅读(16)  评论(0)    收藏  举报