老年选手康复训练
学考考完了。虽然身为d类咸鱼选手还是要好好备战一下noi的。
从今天开始进行康复训练,不过白天应该还是要肝文化课。等过几天训练时间应该会多一点。
[CTS2019]随机立方体
这道题现在做了一遍好像有一点sibo啊,可能是考试的时候太紧张了吧。
题意就不写了。
题目要求恰好个,那我们考虑用至少含个进行容斥。
那么容斥系数需要满足:
进行二项式反演,得到:
即:
由于在时等于,因此上面的式子是良定义的。
那么考虑如何计算至少含个极大数的概率。
首先极大数的行号、列号、bule号(bule代表第三维的名称)一定不是相同的。
比较关键的一点是,我们可以注意到任何钦点个两两坐标全不同的格子为极大数的概率都是相同的。于是我们可以找一个比较特殊的位置计数,比如让他们的坐标为,,,。同时我们钦点。
思考一下,可以发现如果我们只观察至少有一维横坐标的格子,一定是其中的最大值。如果我们只观察至少有一维横坐标的格子,一定是其中的最大值。以此类推即可。不难发现只要满足上述条件,那么这个方案一定合法。
我们设表示所有横坐标至少有一维的格子数。那么满足之前所述条件的概率就是:
同时还要注意,这只是我们钦点的位置和大小关系之后的答案,所有合法的选取位置和大小关系的方案共有种,其组合意义是分别选出三维的横、纵、bule坐标,再决定大小关系。
后面的方案数可以用预处理阶乘及逆元实现计算,之前的概率,则可以通过线性求逆元均摊计算。于是做一组数据就是的,总复杂度。
[CTS2019]珍珠
用二项式定理把和展开,可以得到:
考虑,。
因此
设,
考虑先把算出来,最后一个个加。
至于这个,可以使用分治fft大法。
什么一个log,分治fft天下第一。
[CTS2019]氪金手游
现在想想怎么又比较简单啊。
考虑把关系树随便钦点一个当根。
由于正向边(向儿子连的边,表示必须早于儿子)和反向边同时存在,因此比较麻烦。考虑用容斥将反向边变为正向边,即:选出一个反向边子集,强制这些边必须被违反,其余反向边随意。注意正向边是永远需要满足的。计算得这样计算出的方案有的贡献。
对于一种选法,原树用正向边分成了若干联通块。对于一个点,设表示是它的子树中的点的集合。如果只考虑这棵子树,我们显然要满足是第一个被抽出来的,概率就是,接下来可以分成若干子树递归。
那么若干种方案就可以合起来算概率了。我们设表示以为根的子树,当时,目前满足所有条件的情况乘以他们的系数的概率和。转移比较容易得到。
[ZJOI2019]开关
这真是一道好题,被送退役得心服口服。
先说几个结论:
我们设表示集合幂级数在快速沃尔什变换()后的形式。
那么:
从的意义中可以看出。
其中代表全集的大小。这和子集容斥的原理是相似的。
用前一个式子不难证明。
现在说题目的解法。
根据题目描述,我们设表示第一次到达状态的期望步数。为了分析方便,我们也可以将其看成是从状态到空集的期望步数。那么对于,我们就有:
为了更方便的表达这个式子,我们设形式幂级数,其中当时,,否则。
于是上式可以表达为:
其中是某个不确定的系数,起到补偿不符合该式的作用。我们尝试进行,对于,它是进行后的结果,因此其的结果为,所以其后的结果为。因此:
考虑,因此将代入上式可得。
那么对于,就有:
代入的式子中,我们就有:
而由于,根据之前的结论,,所以
因此:
代入,得,回代入原式,得:
由于非常小,因此后面的式子可以通过简单的计算出来。
[ZJOI2019]语言
考场上只会写3个的我太菜了。
考虑对于一个点,它能交流的所有点就是经过它的链的并。
我们可以用线段树来维护一个点集的连通并的点数(即最小的使得某些点都在内的连通块的点数),具体做法不讲了(想必这篇博客没有人看的233,如果有人问再加上去吧)。再用树上差分思想,在点上添加事件,加上线段树合并,就做完了。
虽然是一个的但我写出来跑的有点慢,可能我太菜了。
LOJ #575 不等关系
一道不算很难的容斥题。
考虑最简单的容斥方法,用来计算,对于至少违背个大于号的方案数,可以发现当我们选定了哪些位置违背以后,限制就只剩下小于号了。此时长度为的排列会被分成部分,大小分别为,每一段内要满足大小递增。那么此时的答案就是:
对于所有方案都是相同的,我们可以不管它。于是只要将所有段的大小的阶乘的逆元相乘就是方案数。
首先考虑暴力做法,我们根据字符串先将排列划分为段,大小分别为(这和上面的定义不一样,只是我懒得换字母了),由于容斥的关系,一些段可能会并起来。我们假定违背了其中个大于号,合并后段的大小分别为,那么这种方案的贡献为。
那么考虑,我们设表示只考虑前段,所有方案的贡献和。设表示的前项和。那么我们只要枚举第段会与前面的几段合并,就可以得出方程:
就得到了的做法。
可以注意到,由于和式中的最后一项非常复杂,因此很难优化成卷积形式。我们考虑更换一种方法,改设表示只考虑排列的前个,所有方案的贡献和。值得注意的是如果和之间是小于,即原本在一段内的,那么我们可以任意取的值,因为我们将看到它对后面是没有影响的。我们再设表示和之间是否用大于号连接(即可以断开),特别的,。设表示的前项和。
根据之前的思路,易得:
变化一下,得:
可以发现,虽然其转化为简单的卷积式比较困难,但是借助分治fft,我们就可以先将算出来,再乘上贡献给后面了。复杂度。
所以说,分治fft天下第一。