觉得有必要在NOI之前开一篇学习内容记录。
至于为什么要取这个标题呢?因为原本是打算用作退役后的高三生活记录的。
5.23
在LOJ上搬了三道原题给大家考了考,然后大家都在考试就我一个人在划水。
SSerxhs 和 Serval 的退役纪念赛
A.幼儿园唱歌题
给一个串\(S\),\(q\)次询问满足是串\(S[l_1,r_1]\)的前缀且是串\(S[l_2,r_2]\)的后缀的最长回文串长度。\(|S|,q\le2\times10^5\)
把串\(S\)反过来接在后面建回文树,然后就是求两个点的公共祖先中深度不超过两子串长的深度最大值。
C.幼儿园篮球题
有\(n\)个球,其中\(m\)个是红色的,其余的是蓝色的,从中随机选出\(k\)个,若选出了\(x\)个红球则得分为\(x^L\)。求期望得分模\(998244353\)。共\(T\)组数据,每组数据的\(L\)是相同的。\(T\le200,L\le2\times10^5,m,k\le n\le 2\times10^7\)
\[\binom{n}{k}Ans=\sum_{i=0}^k\binom{m}{i}\binom{n-m}{k-i}i^L\\=\sum_{i=0}^k\binom{m}{i}\binom{n-m}{k-i}\sum_{j=0}^LS(L,j)j!\binom{i}{j}\\=\sum_{j=0}^LS(L,j)j!\sum_{i=0}^k\binom{m}{i}\binom{n-m}{k-i}\binom{i}{j}\\=\sum_{j=0}^LS(L,j)j!\binom{m}{j}\sum_{i=0}^k\binom{m-j}{i-j}\binom{n-m}{k-i}\\=\sum_{j=0}^LS(L,j)j!\binom{m}{j}\binom{n-j}{k-j}\]
预处理第\(L\)行第二类斯特林数即可。
Codeforces Round #559 (Div. 1)
E. Strange device
交互题。一棵\(n(n\le1000)\)个节点的树,每次可以给交互库一个长度为\(n\)的数组\(d_i\),交互库会对于每个\(i\),在树上标记与点\(i\)距离不超过\(d_i\)且不为\(i\)本身的所有点,然后返回一个\(01\)串表示哪些点有标记。你需要在\(80\)次询问内还原出树的形态。
定义\(query(s,t)\)表示做一次询问,将\(s\)集合中包含的所有数的\(d_i\)设为\(t\),其余的\(d_i\)为\(0\)。其返回值为一个集合\(s'\)。
第一步是求出每个点到\(1\)号点的距离。动态维护\(s_0\)表示到\(1\)号点距离为\(2^k\)的偶数倍的点集,\(s_1\)表示到\(1\)号点距离为\(2^k\)的奇数倍的点集,以及一个集合数组\(S\),其第\(i\)位\(S_i\)表示到\(1\)号点距离为\([(i-1)\times2^k,i\times2^k)\)的所有点。初始时\(k_0=\lceil\log n\rceil\),\(s_0=\{1\},s_1=\varnothing,S=\{\{1,2...n\}\}\)。每次将\(k\)减\(1\),并询问\(query(s_0,2^k),query(s_1,2^k),query(s_0,2^k-1),query(s_1,2^k-1)\),显然\(s_0'=s_0\cup s_1\),然后通过一些集合操作可以得到\(s_1'\),同时将每个\(S_i\)分裂为\(S_{2i}\)与\(S_{2i+1}\)后可以得到\(S'\)。重复此过程直到\(k=0\),每次需要做\(4\)次询问,总询问次数为\(4\log n\)。
接下来考虑对每个点求其父亲编号。对于每个深度\(d\),枚举\(i\in[0,\lceil\log n\rceil)\),将该深度所有节点中二进制位第\(i\)位为\(1\)的位置加入集合\(s\)并询问\(query(s,1)\),然后再枚举所有被标记到的\(d+1\)深度的节点更新答案。看上去需要\(n\log n\)次询问,但实际上\(\%3\)相等的深度可以一起做询问,因此就只需要\(3\log n\)次询问了。
总询问次数\(7\log n\)。
F. Density of subarrays
给一个长度为\(n\)且每个元素都在\([1,c]\)的数列\(a_i\),定义其一个子序列的权值为最大的\(k\)满足所有长度为\(k\)的所有元素在\([1,c]\)的序列均在这个子序列中作为子序列出现过。先要求对于\(i\in[0,n]\)求有多少\(a_i\)的子序列满足其权值恰好为\(i\)。\(n,c\le3000\),答案对\(998244353\)取模后输出。
权值为\(k\)意味着子序列至多可以分为\(k\)段使每段内均包含\([1,c]\)的所有数。考虑\(dp\)。设\(f_{i,j}\)表示前\(i\)个数已经分了\(j\)段且\(i\)恰好是第\(j\)段的最后一个数的方案数,注意为了避免算从算重,需要强制分段时每段最后一个数字是段内第一次出现,可以从\(f_{i,j}\)转移到\(f_{k,j+1}\),转移系数是一堆\(2^x-1\)的乘积。记\(ans_j\)表示答案,那么就可以用\(f_{i,j}\)贡献给\(ans_j\),这里需要乘上\(i\)后面随便选不构成新的一段的方案数,这个系数可以在\(dp\)的过程中计算出。这种做法的总复杂度是\(O(\frac{n^3}{c})\)的。
在\(c\)很小时上述做法无法通过本题。不过我们还有一个更加简单的\(O(\frac{n^22^c}{c})\)的做法,将两者结合后即可通过本题。
牛客挑战赛31
B.克洛涅的多项式
给出一个\(m\)次多项式\(G(x)\)以及\(n\)个数\(x_i\),有一个\(n\)次项系数为\(1\)的\(n\)次多项式\(F(x)\)对于所有的\(x_i\)均满足\(F(x_i)=G(x_i)\),求\(F(k)\)。\(m
令\(H(x)=F(x)-G(x)\),则\(H(x)\)为一个\(n\)次多项式,且\(n\)个零点即为\(\{x_i\}\)。故\(F(x)=G(x)+\prod_{i=1}^n(x-x_i)\)。
C.克洛涅的照片
一个\(n\times m\)的网格,每个格子上有一个数\(0/1\),初始时会读入\(k\)个位置\((x_i,y_i)\)表示该位置上的数是\(1\),其余位置上的数均是\(0\)。每次操作可以将某一行或者某一列的所有数取反,求最少多少次操作后可以使所有位置都变成\(0\)。有\(q\)次修改操作,为对输入的某一行或者某一列取反,要求在每次修改后求出答案。数据保证始终有解。\(n,m\le10^6,k,q\le3\times10^5\)
由于保证有解,因此任意两行要么全等要么全部相反。维护与第一行不同的行数\(A\)以及第一行\(1\)的数量\(B\),答案为\(\min(A+B,n+m-A-B)\)。\(A,B\)均可动态维护,复杂度线性。
D.雷的打字机
一个字符集大小为\(n\)的字符串,每次有\(p_i\)的概率向后添加字符\(i\),当出现连续两个相同字符时停止操作。求停止时字符串的期望长度。\(n\le10^7, \sum_{i=1}^np_i=1\)
设\(f_i\)表示结束时长度为\(i\)的概率,\({f_k}_i\)表示结束时长度为\(i\)且最后一个字符为\(j\)的概率,\(g_i\)表示长度为\(i\)未结束的概率,\(F(x),F_k(x),G(x)\)分别为三者的概率生成函数。于是就有如下的一些等式:
\[F(x)+G(x)=1+G(x)x\\G(x)(p_kx)^2=F_k(x)(1+p_kx)\]
对前式求导并代入\(x=1\)可得
\[F'(x)+G'(x)=G'(x)x+G(x)\\F'(1)=G(1)\]
再将\(x=1\)代入后式可得
\[\frac{G(1)p_k^2}{1+p_k}=F_k(x)\\\sum_{i=1}^n\frac{p_i^2}{1+p_i}G(1)=\sum_{i=1}^nF_i(1)=F(1)=1\\G(1)=\frac{1}{\sum_{i=1}^n\frac{p_i^2}{1+p_i}}\]
线性求逆元即可做到线性复杂度。
E.密涅瓦的谜题
给一个字符串\(S\),\(q\)次询问从\(S\)中选出\(m\)个子串(可以为空)顺序拼接起来后可以得到多少种本质不同的串。\(|S|,q\le10^5,m\le10^{10}\)
为了避免算重,一种可行的策略是,所有方案的子串选取都应该尽量靠后。换言之,对于一个选取方案中相邻的两个子串\(t_i,t_{i+1}\),应满足\(t_{i+1}\)前接上\(t_i\)的最后一个字符后不为原串\(S\)的子串。
记\(dp_{i,j}\)表示考虑了最后\(i\)个子串,当前已构造串的第一位字符是\(j\)的方案数。可以发现转移大致形如\(dp_{i+1,k}=\sum_{j}dp_{i,j}coef_{j,k}+C_k\),这里的\(coef_{j,k}\)和\(C_k\)均可以通过后缀自动机上\(dp\)求出。这一步的复杂度为\(O(\sigma n)\)。
可以发现上述\(dp\)可以写成矩阵的形式。由于\(q\)次询问的转移矩阵都是一样的,因此可以预处理出转移矩阵的\(1,2,3...\sqrt m,2\sqrt m,3\sqrt m...\)次幂,可以将复杂度做到\(O((\sqrt m+q)\sigma^3)\),无法通过本题。
考虑答案是一个行向量乘上转移矩阵的\(m\)次幂再乘上一个列向量的结果。因此可以从前往后维护前缀行向量以及后缀列向量,复杂度可以做到\(O(m\sigma^2+q\sigma)\),可以通过本题。
5.24
参加了学校里的学考模拟,又垫底了。
Comet OJ - Contest #4
D.求和
懒得写了自己看吧......
一个结论是,对于任意的\(x\),\(10x+[0,9]\)这\(10\)个数的答案之和一定是\(45\)。
因此只需要暴力计算最后的不超过\(9\)个数即可。
然而这样\(TLE\)了。
所以就只计算\(1\)个数就行了。
E.公共子序列
给两个长度分别为\(n\)和\(m\),字符集大小为\(3\)的串,求其最长公共不降子序列。\(n,m\le10^6\)
一个显然的思路是,枚举从前往后选了多少个\(1\),枚举从后往前选了多少个\(3\),中间的部分全都选\(2\)。考虑优化这个过程,从大到小枚举选择了多少个\(1\),维护从后往前选\(3\)数量的决策集合(只添不删),假设从后往前选了\(i\)个\(3\)后两个串前面分别剩下\(a_1,a_2\)个\(2\),当前枚举选了\(j\)个\(1\)导致两个串的前缀分别有\(b_1,b_2\)个\(2\)不能选(当然这里要保证\(i,j\)这一对是合法的),那么此时\(2\)的贡献就是\(\min(a_1-b_1,a_2-b_2)\)。这个东西可以根据\(a_1-a_2,b_1-b_2\)的大小讨论,然后维护两棵线段树/\(BIT\)就行了。时间复杂度\(O(n\log n)\)。
5.25
上午参加了学校里的学考模拟,又垫底了。
下午开始写2018 Multi-University Training Contest 2,差不多做完了,题解啥的明天再补。
5.26
上午在家里颓颓颓。
下午过来查成绩。居然查不到,果然停课选手没有人权。
2018 Multi-University Training Contest 2
A.Absolute
求\(\int_{l_1}^{r_1}\int_{l_2}^{r_2}...\int_{l_n}^{r_n}|x_1+x_2+...+x_n|dx_1dx_2...dx_n\)。\(n\le15\),答案模\(998244353\)后输出。
\(|x|=\max(x,0)+\max(-x,0)\),因而把原式拆成两部分计算。显然两部分是等价的,因此只需要计算\[\int_{l_1}^{r_1}\int_{l_2}^{r_2}...\int_{l_n}^{r_n}\max(\sum_{i=1}^nx_i,0)dx_1dx_2...dx_n\]
容斥掉下界,计算
\[\int_{-\infty}^{r_1}\int_{-\infty}^{r_2}...\int_{-\infty}^{r_n}\max(\sum_{i=1}^nx_i,0)dx_1dx_2...dx_n\]
记\(S=\sum_{i=1}^nr_i\)。
若\(S\le 0\)那么显然式子的值为\(0\),否则上式等于\[\int_0^S\int_0^S...\int_0^S\max(S-\sum_{i=1}^nx_i,0 )dx_1dx_2...dx_n\]
令\(y_i=\sum_{j=1}^ix_j\),那么式子可以写成\[\int_{0}^S\int_{y_1}^S...\int_{y_{n-1}}^S(S-y_n) dy_1dy_2...dy_n\\=\int_{0}^S\int_{y_1}^S...\int_{y_{n-1}}^S\int_{y_n}^S 1\ dy_1dy_2...dy_ndy_{n+1}\\=\frac{k^{n+1}}{(n+1)!}\]
这样就解决了\(\max(x,0)\)的部分,而\(\max(-x,0)\)的部分是完全对称的,所以也可以使用同一种方法解决,总时间复杂度为\(O(2^n\log n)\)。
B.Counting Permutations
对于一个\(n\)阶排列,记每个数向左第一个大于它的位置为\(l_i\)(不存在记为\(0\)),记每个数向右第一个大于它的位置为\(r_i\)(不存在记为\(n+1\)),令这个排列的权值为\(P=\sum_{i=1}^n\min(i-l_i,r_i-i)\),给出\(n,m\)求权值为\(m\)的\(n\)阶排列数量。答案对给定大质数取模。\(n\le200,m\le10^9,10^8\le mod\le10^9\)
令\(n\)阶排列的答案的生成函数为\(F_n(x)\),边界\(F_0(x)=1\)。考虑\(n\)阶排列的构成,即在一个\(n-1\)阶排列的\(n\)个间隔中选择一个插入\(n\)这个数,因此\(F_n(x)=\sum_{i=0}^{n-1}\binom{n-1}{i}x^{\min(i+1,n-i)}F_{i}F_{n-1-i}\)。打表可以发现\(F_{200}(x)\)的最高次项指数为\(m=735\),所以直接暴力代入\(x=0...m\)求出点值后多点差值即可,复杂度\(O(n^2m+Tm^2)\)。
C.Cover
给一张图,选若干条路径使得经过每一条边恰好一次,要求路径条数尽量少,输出方案。\(n,m\le10^5\)
不同连通块显然相互独立。连通块内根据奇度点数量求欧拉路/欧拉回路即可。
D.Game
有一个集合\(S\)初始为\(\{1,2...n\}\),两个人博弈,每次操作可以选取集合内的一个数并移除集合内它的所有约数(含本身),不能操作者输。给定\(n\),求是否先手必胜。\(n\le500\)
结论是先手必胜。可以考虑初始时\(S=\{2...n\}\),如果次数先手必胜,则原问题按照这种策略亦可以先手必胜,否则先手取走\(1\),同样可以获胜。
E.Hack It
构造一个\(n\times n\)的\(01\)矩阵,要求\(1\)的数量超过\(85000\)并且不存在两行拥有超过\(1\)个相同的\(1\)的位置。\(n\le2000\)
假设\(n=p^2\),其中\(p\)为质数,可以考虑枚举\(i,j\in[0,p)\),构造一个长度为\(p^2\)的\(01\)串\(S\),其第\(kp+(jk+i)\bmod p\)位为\(1\)。这样的构造显然是满足条件的。
F.Matrix
求至少有\(A\)行全\(1\),至少有\(B\)列全\(1\)的\(n\times m\)的\(01\)矩阵数量模\(998244353\)。\(n,m,A,B\le3000\)
先只考虑一维的情况。答案肯定是\(\sum_{i=A}^nf_i\binom{n}{i}2^{(n-i)m}\),这样实际有\(j\)行全\(1\)的方案被计算了\(\sum_{i=A}^jf_i\binom{j}{i}\)次,因此\(\sum_{i=A}^jf_i\binom{j}{i}=1\),\(f_j=1-\sum_{i=A}^{j-1}f_i\binom{j}{i}\)。
两维的容斥是一样的,令\(g_j=1-\sum_{i=B}^{j-1}g_i\binom{j}{i}\),最终答案即为\(\sum_{i=A}^n\sum_{j=B}^mf_ig_j\binom{n}{i}\binom{m}{j}2^{(n-i)(m-j)}\)。
G.Naive Operations
给出一个排列\(b_i\),要求维护一个序列\(a_i\)支持区间加\(1\)以及查询区间\(\lfloor\frac{a_i}{b_i}\rfloor\)之和。\(n,m\le10^5\)
记\(t_i\)表示\(a_i\)还要加多少次才能使\(\lfloor\frac{a_i}{b_i}\rfloor\)加\(1\),维护\(t_i\)的区间最小值,每次修改操作就暴力找到所有\(t_i\)为\(1\)的位置进行更新,用两棵线段树/线段树+\(BIT\)实现即可,由于\(b_i\)是排列,因此更新次数不超过\(n\ln n\),总复杂度\(O(n\log^2n)\)。
H.Odd Shops
求\((\sum_{i=1}^{10}a_ix^i)^n\)有多少项系数为奇数,答案模\(998244353\)。\(n\le10^9\)
考虑更一般的问题,求\(f(x)^ng(x)\)有多少项系数为奇数。一个性质是\(f(x)^2\equiv f(x^2)\bmod 2\),因此\(f(x)^n\)在\(n\)为偶数的时候奇数项一定均为\(0\)。把\(g(x)\)拆成\(p(x)+q(x)x\)满足\(p(x),q(x)\)的奇数项也均为\(0\),那么\(f(x)^np(x),f(x)^nq(x)x\)两部分的答案独立,可以分别计算,从而可以将问题递归为求\(f(x)^{n/2}p(x)\)与\(f(x)^{n/2}\)的答案。\(n\)为奇数的话就乘一个\(f(x)\)到\(g(x)\)中去即可。
I.Segment
求大小为\(n\)的随机广义线段树上一次\(query(l,r)\)操作会经过的节点数量的期望模\(998244353\)。\(q\)次询问(每次询问的\(n\)是相同的),\(n,q\le10^6\)
考虑一棵广义线段树的生成方式,等价于初始有\(n\)个长度为\(1\)的区间,每次随机合并两个相邻的区间。接着考虑一棵广义线段树上一个区间\([l,r]\)出现的概率。若\(l=1,r=n\)那么概率显然为\(1\),否则若\(l=1\)或\(r=n\),那么概率为\(\frac{1}{r-l+1}\)(即要求某次合并是这\(r-l+1\)次合并中最晚发生的),否则概率为\(\frac{2}{(r-l+1)(r-l+2)}=2(\frac{1}{r-l+1}-\frac{1}{r-l+2})\)(即要求共\(r-l+2\)次合并中某两次是在最后发生的)。
对于一次\(query(l,r)\),根据期望的线性性,答案为所有与\([l,r]\)有交且其父亲未被\([l,r]\)完全包含的区间的出现概率之和。后者有点难以计算,可以转换成被\([l,r]\)包含的叶子减去被\([l,r]\)包含的非叶子的概率,这样就显得可以计算了。
计算时涉及到的东西只有逆元的区间和,\(O(n)\)预处理后每次询问可以做到\(O(1)\)。分类讨论是真的难
J.Swaps and Inversions
有一个长为\(n\)的数组\(a_i\),你可以任意次花费\(y\)的代价交换相邻的两个数,交换结束后你需要付出\(x\)乘上逆序对数的代价,求最小代价。\(n\le10^5\)
答案是\(\min(x,y)\)乘上逆序对数。
5.27
地理居然及格了。然而还是由于政治生物不及格被D了一顿(小声BB)
Codeforces Round #562 (Div. 1)
A.Increasing by Modulo
有一个长度为\(n\)的序列\(a_i(0\le a_i < m)\),每次操作你可以选择一个子序列,把这个子序列中的数\(x\)变成\(x+1\bmod m\),求最少操作多少次可以使序列单调不降。\(n,m\le3\times10^5\)
二分后贪心\(check\)即可。可耻地WA了一发(捂脸)
B.Good Triple
给一个长度为\(n\)的\(01\)串,求有多少个区间内包含一个对应字符均相同的下标等差数列。\(n\le3\times10^5\)
结论是不合法串的长度不会超过\(9\),所以直接暴力就好了,复杂度\(O(9n)\)。
证明:手动验证即可。
C.And Reachability
一个长度为\(n\)的序列\(\{a_i\}\),\(q\)次询问\(x,y\),问是否存在一个下标序列\(x=p_1
满足\(a_{p_i}\&a_{p_{i+1}}\neq 0\)。\(n,q\le3\times10^5\)
记\(f_{i,j}\)表示从\(i\)出发能够到达的最近的且第\(j\)位上为\(1\)的下标是多少,转移显然。
询问的话就取\(a_r\)第\(j\)位为\(1\)的\(\min\{f_{l,j}\}\)判断与\(r\)的大小关系即可。
复杂度\(O(n\log^2n+q\log n)\)。
D.Anagram Paths
给一棵\(n\)个节点的二叉树,每条边上有一个小写字母或者\(?\),\(q\)次修改操作,每次修改某条边上的字符,问修改后是否存在一种方案,使得给所有\(?\)填上小写字母后,所有叶子到根的路径字符串经重排后是否能全部相同,若能,还需要求出每种字符在这个字符串里的最多出现次数。\(n,q\le1.5\times10^5\)
显然所有叶子的深度必须全部相等。而所有叶子深度全都相等的树,在缩去只有一个儿子的节点后,树高是\(O(\sqrt n)\)的。记\(s_i\)表示深度为\(i\)的节点数量,显然\(s_{i-1}\le s_i\),而缩点会导致所有\(s_{i-1}=s_i\)的层被缩掉,保留下来的每一层均满足\(s_{i-1}
对(缩点后的)树上每个节点\(x\)记\(dp_{x,y}\)表示\(x\)向下走到某个叶子的所有路径中,\(y\)字符的最多出现次数是多少,记\(len_x\)表示\(x\)向下走到某个叶子的距离。那么第一问答案为Yes
当且仅当对于所有\(x\),均满足\(\sum dp_{x,y}\le len_x\),必要性显然,充分性可通过构造证明。
接着只要对每次询问暴力更新就好了,由于保证了每个点的度数,复杂度\(O(n\sigma+q\sqrt n)\)或\(O((n+q)\sqrt n)\)。
5.28~6.2
回去上文化课了。
6.3
全天学考三模。晚自习居然获批来机房?
开始补Codeforces Global Round 3的题,题解明天放。
6.4
上午学考三模,下午是毫无意义的试卷讲评。
G.Gold Experience
有一张\(n\)个点的图,每个点上有一个权值\(a_i\),两个点\(i,j\)之间有边当且仅当\(\gcd(a_i,a_j)=1\)。现给出\(k(k\le\frac n2)\),要求找出一个大小为\(k\)的点集,满足这个点集是独立集,或者这个点集的导出子图中没有孤立点(即每个点的度数均不为零)。\(6\le2k\le n\le10^5,2\le a_i \le 10^7\)
先随便找出一个极大独立集\(S\),若\(|S|\ge\frac n2\)那么就直接结束了,否则对每个不在\(S\)中的点求它与\(S\)中的哪一个之间有边(若有多个则任意一个均可),从而可以把全部\(n\)个点分成\(|S|\)个连通块,假设这时有\(m\)个连通块是孤立点,那么可以证明对于任意的\(k\le n-m\)均可以构造出答案。
由于\(m\le|S|-1\),所以根据这种策略我们一定可以构造出任意\(k\le \max(|S|,n-|S|+1)\)的答案,由于\(k\le\frac n2\),因而这种方法一定可以构造出解。
怎么求极大独立集,以及怎么对于每个不在\(S\)中的点求其在\(S\)中的相邻点呢?先考虑前一个问题,即当前存在一个数集,每次尝试加入一个数,需要判断加入的数是否和原数集中的所有数都不互质。根据\(\sum_{d|n}\mu(d)=[n=1]\),可以维护一个数组\(sum_i\),每次加入一个数\(x\)就对\(x\)的所有约数\(d\)进行\(sum_d+=\mu(d)\),判断\(x\)是否可以加入,只要判断\(\sum_{d|x}\mu(d)\)是否为\(0\)就行了。
这样可以解决第一个子问题。第二个子问题可以在这种做法的基础上加上整体二分,由于\(10^7\)内一个数\(\mu(d)\neq0\)的约数\(d\)至多\(2^8\)个,因为总时间复杂度\(O(n2^8\log n)\)。
6.5
上午找数学组老鸽们学习了伯努利数求自然数幂和。
定义伯努利数的生成函数为\(B(x)=\sum_{i\ge0}\frac{B_i}{i!}x^i=\frac{x}{e^x-1}\)。
考虑设自然数幂和的指数生成函数\(A_n(x)=\sum_{i\ge0}(\sum_{j=0}^nj^i)\frac{x^i}{i!}\),则\[A_n(x)=\sum_{j=0}^n\sum_{i\ge0}\frac{(jx)^i}{i!}\\=\sum_{j=0}^ne^{jx}\\=\frac{1-e^{(n+1)x}}{1-e^x}\\=B(x)\frac{e^{(n+1)x}-1}{x}\\=B(x)(\sum_{i\ge0}\frac{(n+1)^{i+1}}{(i+1)!}x^i)\]
于是\(k!A_n(x)[x^k]=\frac{1}{k+1}\sum_{i=0}^k\binom{k+1}{i}B_i(n+1)^{k+1-i}\)
伯努利数可以多项式求逆\(O(n\log n)\)求得。然后要求\(A_n(x)\)也只需要一次卷积。
Luogu3711 仓鼠的数学题
定义\(S_k(x)=\sum_{i=0}^xi^k\),求多项式\(\sum_{k=0}^nS_k(x)a_k\)。\(n\le250000\),系数对\(998244353\)取模。
\[\sum_{k=0}^nS_k(x)a_k=\sum_{k=0}^n\frac{a_k}{k+1}\sum_{i=1}^{k+1}\binom{k+1}{i}B_{k+1-i}(x+1)^i\\=\sum_{i=1}^{n+1}(x+1)^i\sum_{k=i-1}^n\binom{k+1}{i}\frac{a_k}{k+1}B_{k+1-i}\]
令\(C_i=\sum_{k=i-1}^n\binom{k+1}{i}\frac{a_k}{k+1}B_{k+1-i}\),则求出伯努利数后只需一次卷积即可求出\(C_i\),之后再使用二项式定理展开\((x+1)^i\)即可。
6.6
昨晚vp了一场2018 Chinese Multi-University Training, Nanjing U Contest然而写了两个小时就跑路了。今天早上过来补了几个题。题解懒得写了。
晚上打了场小米 Online Judge TCO 预选赛,又垫底了。
C. Independent
给一个\(n\times n\)的矩阵\(A\),定义一个非空子矩阵\(B\)的补矩阵为原矩阵去掉\(B\)所在行列后剩下的矩阵。求在模\(P\)(一个质数)意义下有多少个正方形矩阵\(B\)满足其补矩阵非空且\(B\)与\(B\)的补矩阵均满秩。\(n\le40\)
复杂度看上去是\(O(n^5)\)的,然而貌似\(O(n^6)\)卡卡常就过了。
先枚举\([l,r]\subseteq[1,n]\),即枚举\(B\)所在的行区间,接下来可行的\(B\)就只有\(n-r+l\)个。依次考虑判断这\(n-r+l\)个矩阵\(B\)是否满秩,顺序枚举,可以发现相邻的两个矩阵\(B\)的差别仅为替换了一个行向量,那么使用带删除线性基即可做到单次\(O(n^2)\)插入删除,总复杂度\(O(n^5)\)。
教练我不想写带删除线性基怎么办?
因为是按顺序插入与删除的(类似队列,每次操作恰在队首删除,队尾加入),因此可以对于每个行向量维护其被插入线性基的时间,每次新插入向量时,尽量将原有线性基内向量替换为更新插入的向量(比较插入时间),因而在判断是否满秩时,只需要判断构成线性基的\(r\)个行向量是不是最近插入的\(r\)个即可。复杂度依然为\(O(n^5)\)。
6.7
NCEE 2019 Day 1
Good Luck & Have Fun !
Codeforces Round #564 (Div. 1)弃疗了没打,不过感觉打了就上分了啊。
6.8
NCEE 2019 Day 2
Good Luck & Have Fun !
去JUNE Challenge 2019 Division 2玩了玩写了几个题。
Q:为什么打Division 2?
A:因为Rating不够打Division 1 \(Q\omega Q\)
7.18
非常抱歉,出于某种原因,这篇文章鸽了。