觉得有必要在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<n\le5\times10^6\)

令\(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\)后输出。

将积分展开,最终是要在函数\(F(x)=\text{sgn}(x)x^{n+1}\)上求\(2^n\)个点值,\(dfs\)的话可以做到\(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<p_2<...<p_k=y\)满足\(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}<s_i\),因此总层数为\(O(\sqrt n)\)。
对(缩点后的)树上每个节点\(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{1}{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\)

to be continued...

RE:ゼロから始める文化課生活的更多相关文章

  1. 【日语】日语单词N3_N4_N5

    日语单词N3_N4_N5 单 词 讲 解 あ行单词 ああ:0[副]那样.那种 例句:ああ言うことはしないほうがいい.那样的事情最好不做. 電車の窓からごみを棄てているああ言うことはしないほうがいい. ...

  2. 日语单词N3_N4_N5

    单 词 讲 解 あ行单词 ああ:0[副]那样.那种 例句:ああ言うことはしないほうがいい.那样的事情最好不做. 電車の窓からごみを棄てているああ言うことはしないほうがいい. 挨拶(あいさつ):① 寒暄 ...

  3. 我的创业劲儿,无可阻挡-JAVA学院张孝伟

    导语:张孝伟,这个怀揣着创业梦想的农村小伙,为了报答父母的恩情,他开启了自己的逐梦之旅.友好的伙伴,火旺的生意.以前让他如鱼得水.就在他满足于现状的时候,一场突如其来的事故,让他一夜间倾家荡产.他是否 ...

  4. IBM面试记

    link:http://kb.cnblogs.com/page/107213/ 话说其实我很久没有被正经面试过了.一开始去微软实习自然经过了经典的笔试和几轮面试,然后去了朋友的创业公司并立即被激动集团 ...

  5. 计算机四级网络工程师--《操作系统(Operating System)》重点内容学习

    开篇语 今天开始看<操作系统>,没办法,计算机网络技术还算有点底子.至于操作系统要不是以前看过一些这方面的书籍,以及上学期学了单片机工作原理,我估计我真的是懵逼的!所幸,在网上找的233网 ...

  6. 送你一双看见时间的眼睛--时间master软件

    开篇语 最近感觉自己时间管理非常错乱,所以去网上找了一些有关于时间管理的软件.然后发现了好几款还不错的软件或者是微信上的应用,下面我把我的一些使用情况以及如何使用的方法写出来,给有需要的朋友进行借鉴! ...

  7. 微信小程序(有始有终,全部代码)开发--- 新增【录音】以及UI改进

    开篇语 寒假发了一篇练手文章,不出意外地火了: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本,出乎意料的火了: 简年18: ...

  8. 微信小程序(有始有终,全部代码)开发--- 新增模块: 图片选取以及拍照功能

    开篇语 前几天发了一篇: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本: 简年18: 微信小程序(有始有终,全部代码)开发 ...

  9. 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 Bug修复

    开篇语 昨晚发了一篇: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 然后上午起来吃完午饭之后,我就准备继续开工的,但是突然的,想要看B站.然后在一股 ...

随机推荐

  1. Oracle中如何判断字符串是否全为数字

    Oracle中如何判断字符串是否全为数字 学习了:http://www.cnblogs.com/zrcoffee/archive/2012/12/11/2812744.html 本文介绍了判断字符串是 ...

  2. [Javascript] Deep Search nested tag element in DOM tree

    // For example you want to search for nested ul and ol in a DOM tree branch // Give example <ol&g ...

  3. Android更新带进度条的通知栏

    在网上查询了下.Android版本号更新通知栏带进度条,醉了,基本都是复制过来.有的代码不全,连源代码下载都没有.有下载也须要积分,还不能用,真黑心啊!!之前自己也写过自己定义通知栏Notificat ...

  4. jsp页面自动换行

    其实只要在表格控制中添加一句 <div style="word-break:break-all">就搞定了.</div>其中可能对英文换行可能会分开一个单词 ...

  5. gdb的使用(转)

    gdb使用 转自清华大学操作系统实验指导书 gdb 是功能强大的调试程序,可完成如下的调试任务: 设置断点 监视程序变量的值 程序的单步(step in/step over)执行 显示/修改变量的值 ...

  6. C# Log4Net简单使用方法

    log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. 使用log4net,一个很明显的好处 ...

  7. anaconda 使用 及 tensorflow-gpu 安装

    Anaconda简易使用 创建新环境 conda create -n rcnn python=3.6 删除环境 conda remove -n rcnn --all 进入环境 conda activa ...

  8. Prism学习(1)---前期准备

    本文摘取自Gene's Blog的博客园文章,版权归Gene's Blog,仅供个人学习参考.转载请标明原作者Gene's Blog. 在学习Prism框架之前,我预先写了一个非常简单的计算器解决方案 ...

  9. Dynamic编程

    Dynamic Binding 动态绑定 Binding:解析Type,member,operation的过程. 动态绑定将Binding从编译时延迟到运行时进行. 场景 编译时,程序员知道特定的fu ...

  10. css中常用的七种三栏布局技巧总结

    三栏布局,顾名思义就是两边固定,中间自适应.三栏布局在开发十分常见,那么什么是三栏布局?例如当当网首页边商品导航和右边导航固定宽度,中间的主要内容随浏览器宽度自适应.效果如下图所示: 下面围绕的这样的 ...