A Solution

by Anemones

题意要求对于所有相同的 都要使得它下面的 全部相同,我们发现若一些相同的 对应的 有不同,则只能保留一个 ,我们肯定要保留那个出现最多的 ,而剩下的 对应的 显然需要改变,由于可以改成 的任意数,我们给它单独变成一个独立的种类(也就是从未出现过的数)就行。

B Solution

by Safari_Mo

去掉相同的行。

如果一行的 把另外一行全部包含,则删除这一行。

找出剩下的行的 的个数的最大值即可。

正确性证明:

设第 行把第 行完全包含,如果

这时不可能翻转一位使得

此时根据 的结论(答案为 的个数)不难得出答案的上界,也可以取到上界, 复杂度 .

C Solution

by I_like_magic

题面大致意思:序列 是单调不降的,并且要求对任意的 ,进行至少两次 操作后得到 ,满足

很显然,如果 ,那么,当 时,得到的新的 一定不等于原先的 ,而当 变小或变大时,由于 的单调性, 操作只会让 更加远离原先的 (或不变),永远不会等于原先的

但是,如果 ,那么无论经过多少次 ,新的 都会等于原先的

所以,我们只需要统计 满足单调性,同时 的序列个数就行了。

我们考虑到,如果 ,那么 ,由于单调性, 值都会等于

所以,满足条件的序列 ,一定可以被划分为若干个区间,且每个区间 相等,且

然后就可以开始递推了。

我们先不考虑题目给的几条限制。

表示序列长度为 的答案数。

先假定

接下来是计算每个

对于一个长度为 的序列,我们可以假设最末端的 都被划分到了一个区间,而这个区间的 种取值,所以这种情况答案数为

所以得到

,那么

显然是可以每一步 处理好 ,从而实现 的总复杂度的。

现在我们加入了若干条限制。

我们可以发现,限制相当于是告诉我们,对于任意的 ,将 直接确定为

读入限制时,判断一下有没有冲突,有冲突直接输出

然后,修改一下递推。

先正常递推,然后遇到了已经被确定的区间 ,直接跳到区间结尾 ,考虑 如何计算。这个确定的区间可以和前面没确定的连上,并且连上的部分的值已经确定,所以方案数就是连上若干个,加上剩下部分的方案数,即为 ,注意如果前面存在已经被确定的区间 ,那么方案数应是

考虑计算完 ,后面怎么推,显然, 的贡献有两种情况,第一种,从 一整个区间都连上了,答案显然是 ,另一种情况是 ,这个贡献就是 ,与前面无限制的情况同理,处理方法相同。

所以,这一部分的

D Solution

by cjh20090318

通常地,我们将概率转化为合法方案数除以总方案数。

每个字符只有选或不选两种情况,所以总方案数即为

对于每一个特定字符 ,对其构造一个 矩阵(矩阵从 开始,字符串从 开始):

答案即为:

首先对于最后求总方案数的快速幂,可以利用费马小定理优化,令

时间复杂度的瓶颈在于矩阵乘法,考虑改如何优化其效率。

因为矩阵构造的特殊性,可以发现对于所有的 都必定为 ,对于矩阵对角线上的元素恒为 ,只有一半的矩阵需要进行矩阵乘法。

根据矩阵乘法的定义,,由上述性质,只需要对非零的位置做矩阵乘法,即 ,特化的矩阵乘法式子即

理性分析其矩阵乘法次数,,这里略去不作证明。

时间复杂度 ,其中 为矩阵乘法优化的常数,约等于

较小时可以近似认为是

E Solution

by Anemones

首先根据期望的线性性展开原式:

由于 ,可以证明恒有 。且序列 具有独立性,当考察 时,两者分别由互不相交的随机变量集合 决定。因此 相互独立,满足

于是我们只需要分别计算出所有前缀最大值的一阶矩 和二阶矩 ,后缀部分同理可得。

在离散概率空间内,对于取值范围在 的随机变量 ,其矩的计算可转化为累积分布函数(CDF)的求和:

。由于 内均匀分布,其单变量 CDF 为:

显然, 在由所有 构成的 个离散区间内是关于 的一次式。因此, 在每个离散区间内是一个最高 次的多项式。

我们考虑离散化数轴,对每个区间维护多项式系数。每引入一个新的 ,若区间在 内,多项式执行一次 的乘法更新:

区间内的矩贡献则利用伯努利数预处理的自然数幂和公式 进行 求解。

最后,通过前缀和后缀的矩合并答案:

不难证明这个式子和原式等价。

F Solution

by Wa1ChA

为排列 中的四个下标(不重),满足 。我们对他们的值 的大小关系进行讨论。

  1. 显然有 ,读者自证不难。

  2. 同理)。

    不等式左侧为 ,右侧为

    右式减左式得: 中一个数的两倍,减去 中一个数的两倍。由 易得差值 ,故左式恒小于右式。

  3. 同理)。

    不等式左侧为 ,右侧为

因为有 ,所以左式恒大于右式。

综上,三种情况成立条件无交。

本题定义存在情况 为合法排列。考虑容斥,答案即为:排列总数 - 无情况 的排列数 - 无情况 的排列数 + 只有情况 的排列数。

排列总数

。时间复杂度 ,快速阶乘可以做到

无情况 的排列数

约定 表示当 时的一个合法四元组。

结论:无情况 的排列中, 所在的下标集合为

考虑反证法。若 的下标不在上述集合中,不失一般性地,我们讨论 的下标(约定 ):

  • 的下标为 :存在 满足情况

  • 否则,一定存在 满足情况

分类讨论 的下标:

  • 下标为 :规模为

  • 下标为 :容易证明 的下标一定为 。此时可以把 两个数看作一个数,原问题规模减小为

  • 下标为 :容易证明 的下标一定为 的下标一定为 。此时可以把 三个数看作一个数,原问题规模减小为

容易发现, 三个数字的关系也是满足上述结论和分讨的。

考虑如何刻画这个序列。

我们从小到大向排列里面加入数字。令已经被填入数字的位置状态为 ,未被填入数字的位置状态为 。则根据上述三种讨论,把上述三种初始状态单独拉出,产生初始形如 的序列

在加入任意个数字后,这个序列无情况 当且仅当:

假设当前 被填为 。那么我们接下来仅可以把 填为

  • 若把 填为 ,则无影响。

  • 若把 填为 ,再下一次必须要先把 填为 。否则在 填为 时,违反上述条件。

  • 显然不能将 填为

这个非常好 dp。令 表示 的合法排列总数,有

读者仔细思考会发现,这个 dp 在序列末尾存在边界问题。但笔者提及过 三个数字的关系满足由 推导的结论和分讨。这三个数显然是最后放入的,把序列视作缺失末尾部分,直接 dp 就是对的。

暴力求出 较小时的边界,答案即为

时间复杂度 ,使用矩阵快速幂优化可以达到 。其中 为矩阵大小,本题中

无情况 的排列数

类似上文,我们刻画这样的序列。

我们从小到大向排列里面加入数字。令已经被填入数字的位置状态为 ,未被填入数字的位置状态为

在加入任意个数字后,这个序列无情况 当且仅当:

当序列全为 时,我们可以任选一个位置放入。

  • 若选择位置下标为 ,则每次只能在 串开头和末尾把一个 变为

  • 否则,每次只能把与 串相邻的 变为 。当有一侧的 被清空后,转化为了上一种情况。

容易发现,第一次选择的方案数为 ,接下来 次,每次方案数为 ,最后一次方案数为

故答案为

时间复杂度 ,快速幂可以做到

只有情况 的排列数

约定 表示当 时的一个合法四元组。

考虑 两个数字,他们显然应该相邻。

考虑反证法。若 不相邻(约定 ):

  • 不在端点上,则一定有 符合情况

  • 不在端点上,则一定有 符合情况

  • 都在端点上,则一定有 符合情况

同理可证, 的位置与 相邻。

手玩发现边界上可以有例外,具体的, 可以与 中任意一个数相邻, 同理。

所以这种情况()共有 种方案。


正解的多测次数很多(不过这样 的快速阶乘算法就无法通过了),需要类似离线处理的手法才能通过。

综上,总复杂度