2023.5 做题记录

houzhiyuan / 2023-05-03 / 原文

先补一波 CTS2019。

全数数阵容有点震撼。

D1T1 \(\color{Gold}\bigstar\)

感觉数数的方向错了就寄了。

发现一个不可做的式子应该从头开始换方向考虑。

题目保证 \(k\) 比较小,但好像没什么用,还是需要考虑容斥,设 \(f_i\) 表示钦定 \(i\) 个极大点的方案数,那么答案就是:

\[\sum_{i=k}^n \binom{i}{k}f_i(-1)^{i-k} \]

然后就去求 \(f_i\)

我一开始的想法是考虑枚举这 \(i\) 个极大点的编号,然后方案数就是 \(i\) 个下降幂乘起来的形式,然后可以发现 \(i\) 个点间是不影响的,但是需要满足一个偏序关系,不太可做。

换个角度,考虑一层一层去放。

\(i\) 个极大点无论怎么放,其影响的格子总数都是一样的,也就是 \(nml-(n-i)(m-i)(l-i)\),记 \(s_i=(n-i)(m-i)(l-i)\)

与这 \(i\) 个点无关的可以乱放,方案数 \(\binom{s_0}{s_k}s_k!\)

确定这 \(i\) 个点的位置,方案数 \(n^{\underline i}m^{\underline i}l^{\underline i}\)

然后放影响的,剩余的 \(s_0-s_k\) 个数中,最大的数一定是极大点,把它选出来,然后再选一些点放在它影响的范围内,然后剩余的点就再拿出最大的点作为极大点。

考虑影响的范围,编号比你小的极大点范围内的点显然不需要考虑,画个图,第 \(j\) 层的个数为 $s_{k-j}-s_{k-j+1} $。

因此第 \(j\) 层的方案数为 \((s_0-s_{k-j+1}-1)^{\underline{s_{k-j}-s_{k-j+1}-1}}=\frac{(s_0-s_{k-j+1}-1)!}{s_0-s_{k-j}}\)

全部乘起来:

\[f_i=\frac{n^{\underline k}m^{\underline k}l^{\underline k}\binom{s_0}{s_k}s_k!\frac{(s_0-s_k-1)!}{(s_0-s_{k-1})!...}}{s_0!}\\ = n^{\underline k}m^{\underline k}l^{\underline k}\frac{1}{(s_0-s_k)!}\frac{(s_0-s_k-1)!}{(s_0-s_{k-1})(s_0-s_{k-2})...}\\ =n^{\underline k}m^{\underline k}l^{\underline k}\prod_{i=0}^{k-1}\frac{1}{s_0-s_{k-i}} \]

线性逆元,复杂度 \(O(Tn)\)

D1T2 \(\color{blue}\bigstar\)

不是很难的题。

一种方案是否满足条件,放在值域上考虑,如果 \(i\) 选了 \(a_i\) 个,那么只和 \(a_i\) 有多少个奇数有关。

枚举一下有多少个奇数,可以得到式子:

\[n!\sum_{i=1}^k [x^n](\frac{e^x+e^{-x}}{2})^{D-i}(\frac{e^x-e^{-x}}{2})^i \]

这个东西不太好做,因为后面的两个东西都需要展开。

考虑二项式反演一下,把其中一个变成 \(e^x\)

\(f_i\) 表示钦定 \(i\) 个选奇数之后的方案数,可以得到:

\[f_i=n![x^n](\frac{e^x-e^{-x}}{2})^ie^{(D-i)x}\\ =\frac{n!}{2^i}\sum_{j=0}^i \binom{i}{j}(-1)^{i-j}[x^n]e^{(D-2i+2j)x}\\ [x^n]e^{kx}=\frac{k^n}{n!}\\ f_i=\frac{1}{2^i}\sum_{j=0}^i \binom{i}{j}(-1)^{i-j}(D-2i+2j)^n \]

最右边那个可以预处理成一个 \(g_{i-j}\),然后卷积即可。

最后二项式反演回来,复杂度 \(O(n\log n)\)

D1T3

提交答案,扔了。

D2T1

计算几何,先咕。

D2T2 \(\color{red}\bigstar\)

好高妙的题。

我的想法是先考虑建一个 trie 树,那么一个串字典序比 \(s\) 小是好判断的,然后循环同构算一下,那么在重复的方案里只能选一个去统计,然后不会了。

第一步转化是考虑容斥,换成每个子串都大于等于 \(s\)

相当于在 kmp 上匹配,考虑一个点的出边,那么要么前往另一个点,要么前往 \(0\),因为不能走字典序小的边。

\(P(x)\) 表示串 \(x\) 匹配到的节点。

\(P(T^{\infty})=P(T^{\infty}+T)\),所以在后面加个 \(T\) ,在 kmp 上的匹配是一个环。

然后考虑如果 \(P(N)=P(N+T)=P(N+T^{\infty})\),那么和 \(N\) 匹配的后缀肯定 \(T^{\infty}\) 里也有,所以 \(P(T^{\infty})=P(N)\)

因此找到一个 kmp 上的节点,以及一个串 \(T\),满足绕成一个环就对应一个方案。

出边只有两种,到一个点,到 \(0\)

因此枚举几步之后到达 \(0\),如果完全没有经过 \(0\) 方案数就是 \(1\)

复杂度 \(O(nm)\)

D2T3 \(\color{blue}\bigstar\)

全场最简单的题了吧。

先考虑如果是 \(T_1<T_2<T_3<T_4...\) 咋做。

\(1\) 的时候,把后面的看成是一个整体,概率是 \(\frac{W_1}{\sum_{i=1}^n W_i}\),总概率就是每一个除以后缀和乘起来。

那么外向树,自然就是 \(\prod \frac{W_i}{siz_i}\)\(siz_i\) 表示 \(W_i\) 的子树和。

会有内向的边,直接容斥,要么把这条边删掉,要么把它变成外向边,然后乘上容斥系数加起来。

背包,\(f_{i,j}\) 表示 \(i\) 子树内的子树大小为 \(j\) 的总和,直接做即可。

复杂度 \(O(n^2)\)


学习了一下斯特林反演。

不过好像没啥用啊。。。

bzoj4671

这个题,先想到了直接状压然后容斥之类的东西,但是很难做,因为边之间会相互影响。

考虑直接枚举最后的图连通块划分,这个是个贝尔数,很小,然后把中间的边全部断掉,这个可以线性基算。

然后咋算答案啊,先设一个 \(f_i\) 表示钦定 \(i\) 个连通块的方案数,\(g_i\) 表示恰好为 \(i\) 个连通块的方案数,得到:

\[f_i=\sum_{j=i}^n \begin{Bmatrix}j\\i\end{Bmatrix} g_j \]

然后这个可以 \(O(n^2)\) 暴力反演,没了。

CF1677E *2900 \(\color{blue}\bigstar\)

枚举 \(p_i,p_j\),对数是 \(O(n\log n)\) 的。

观察每一对数造成贡献的区间,会发现是左端点是 \((L_i,l]\) ,右端点是 \([r,R_i)\) 的所有区间。

\(L_i,R_i\) 表示 \(i\) 这个数左边、右边离他最近的比他大的数,这个可以单调栈。

那么这个贡献就是一个矩形,问题变成矩形覆盖,矩形求和。

不可做。

那么观察一下矩阵的特殊性质,覆盖不好做,但是我们会做矩阵加,因此只需要把矩阵拆成不相交的就好了。

容易发现对于每个 \(p_i\times p_j\) 不同的矩形一定不会相交,因为区间最大值只有一个。

那么相当于只需要处理内部,那么把所有 \([l,r]\) 离线下来,就可以转化为若干个区间满足不交了。

然后矩形加,矩形和,这个可以直接历史和线段树即可,这个跑的比 cdq 快很多。

复杂度 \(O(n\log^2 n+q\log n)\)

后面那个东西也可以离线下来树状数组,不过不太会。

CF1817C *2400 \(\color{Gold}\bigstar\)

赛时感觉和平常做题很不一样,很没有脑子,玉玉了。

给你点值,显然就是来插值的。

一开始有个暴力做法,就是插值出系数,然后把 \(x+s\) 带入展开,然后解一个方程。

然后没继续想,输麻了,后面一直以为是什么乱搞。

结果很简单啊,展开只需要展开到 \(x^{d-1}\) 的系数就好了,因为这个的式子和 \(s\) 有关,就可以解出来,由于题目保证有解,因此不需要考虑后面每一位是否合法了。

反正就列一下插值系数的式子就做完了。