来自学长的馈赠8 社论
IOI 赛制 suki
A. 跳一跳
递推可以 \(O(n)\) .
对每个点考虑贡献然后错位相减可以得到答案是 \(\displaystyle f(n)=\dfrac1{n-1}-\dfrac1{n(n-1)}+1-\dfrac1n+\sum_{i=1}^{n-1}\dfrac 1i\) .
可以分段打表优化,或者前面无脑逆元后面的调和级数用多项式科技优化,这样就是 \(O(\sqrt n\log n)\) 的了 .
B. 求和
首先 \(g(n)\) 直接扩展欧拉定理递归就可以在 \(O(\log n)\) 步内求出 .
然后分段打表即可,\(O(n\log n)\) 跑 \(10^7\) 的表也不是很慢 .
C. 明明的随机数
令 \(f_i\) 表示有 \(i\) 个不限制的行,\(m\) 个互不相同的列的方案数 . \(g_i\) 表示有 \(i\) 个互不相同的行,\(m\) 个互不相同的列的方案数,则
Stirling 反演即得
注意到 \(f_i=(c^i)^{\underline m}\),于是 \(g\) 就好求了 .
我们先算出 \(k_1\times k_2\) 的方案然后乘 \(\displaystyle{n\brace k_1}{m\brace k_2}\) 即可 .
第一类 Stirling 数可以直接递推 \(O(k_1k_2)\) 做,乘用的第二类 Stirling 数可以用
直接暴力模拟,\(O(k_1+k_2)\) .
Bonus:\(O(n\log n)\) 做法 .
我不会复杂度分析,于是令 \(n,m,k_1,k_2\) 同阶 .
首先一行第一类 Stirling 数可以倍增做到 \(O(n\log n)\) .
那么考虑如何快速求 \(f_i=(c^i)^{\underline m}\) .
下降幂化普通幂:
第一类 Stirling 数我们已经求过了,于是我们只需要求上面那个玩意在 \(c^i\) 处的取值 .
然后就是 CZT 板子了吧,可以 \(O(n\log n)\) .
总时间复杂度 \(O(n\log n)\) .
D. 凯爹博弈
so lazy,
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16545185.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ