At刷题计划?(upd:2023.2.28)

At刷题计划?

ARC105F

集合幂级数科技板题

直接计算二分图并不好做,于是先计算双色图的个数

记一般双色图的集合幂级数为\(F\),记连通双色图的集合幂级数为\(G\)

再记连通二分图的集合幂级数为\(H\),并定义乘法为子集卷积

所以\(G=2H,\exp G=F,H=\frac{1}{2}\ln F\)

现在只要求出\(F\),然后集合幂\(\ln\)就可以了

对于\(F\),我们可以先枚举点集\(T\),并钦定一部分为黑色,补集为白色

\(w(T)\)为子集\(T\)在原图中含有的边数,所以\(F(T)=\sum_{P\cap Q=\emptyset ,P\cup Q=T}2^{w(T)-w(P)-w(Q)}\)

于是可以先把\(2^{w(T)}\)提出来,再对里面做子集卷积,总复杂度\(O(n^22^n)\)

ARC112E

很有意思的题

考虑对一些数的最后一次操作,假设\(l\)个移到前面,\(r\)个移到后面

那么\(a_{l+1}\cdots a_{r-1}\)必须是递增的,因为这些数没被操作过

然后可以拿斯特林数算一算

ARC119E

\(sum\)为初始的答案

写出翻转一个区间的柿子

\[\min{(-|a_l-a_{l-1}|-|a_r-a_{r+1}|+|a_r-a_{l-1}|+|a_l-a_{r+1}|)}+sum \]

我们可以把\((a_l,a_{l-1})\)看成平面上的一个点,其权值为\(-|a_l-a_{l-1}|\)

于是我们要最小化一对点的权值与曼哈顿距离的和

可以双关键字排序,然后线段树维护\(y\)轴上的答案

ARC120F1

太喵了

肯定是要计算经过某个位置的选择方案数

如果这个数对于每个位置都相同就会很好算

这启发我们下一步的构造

可以发现,如果我们把\(1\)\(n\)接起来变成环,那么每个位置的答案就是一样的了

但是发现会少算\(1\)\(n\)同时选的方案数

进一步思考,可以发现这是递归定义的

\(S(l,r,k)\)表示\(a_{l-r}\)这一段,选\(k\)个的答案,令\(len=r-l+1\)

\(f(i,j)\)表示长为\(i\)的序列上,在限制下选出\(j\)个的答案

\[f(i,j)=\binom{i-j+1}{j}\\ S(l,r,k)=f_{len-3,k-1}\sum_{i=l}^ra_i+f_{len-4,k-2}(a_l+a_r)+S(l+2,r-2,k-2) \]

可以\(O(n)\)计算

ARC121D

我们认为选择单个就是和\(0\)组合在一起

那么最优的组合就是最小+最大,次小+次大……

证明:

考虑\(A\le B\le C\le D\)

那么\(\max(A+D,B+C)\le \max(A+C,B+D)\)

同时\(\min(A+D,B+C)\ge \min(A+C,B+D)\)

证毕

所以可以枚举往数组中加入的\(0\)的个数,也就是单个选,复杂度\(O(n^2)\)

ARC121E

我是容斥菜狗

\(f_{i,j}\)表示以\(i\)为根的子树中,钦定了\(j\)个连向祖先

转移不难,注意这里先不管钦定点以外点的排列顺序

然后答案等于\(\sum_{i=0}^nf_{1,i}(-1)^i(n-i)!\)

用点树上背包的技巧就做完了

ARC122E

从末尾开始往前填

那么当前能填的数的相对顺序一定无影响

于是随便找一个就行了

ARC123D

首先差分后容易发现

\(A_i-A_{i-1}\le B_i-B_{i-1}\)

所以有\(B_i\ge B_{i-1}+max(0,A_i-A_{i-1})\)

这里因为要求递增,所以和\(0\)\(max\)

然后可以直接三分

然后就是转化成一个求中位数的问题

ARC123E

首先考虑缩小我们的查询范围

\(f(x)=a_x+\frac{x}{b_x},g(x)=a_y+\frac{x}{b_y}\)

\(F(x)=\lfloor f(x)\rfloor,G(x)=\lfloor g(x)\rfloor\)

显然当\(f(x)<g(x)-1\)\(f(x)>g(x)+1\)时,\(x\)一定不满足条件

再令\(mid\)满足\(f(mid)=g(mid)\)

\(mid\)两侧\(F-G\)的绝对值一定为\(0\)\(1\)

考虑对\(F-G\)求和,再用区间长减去,就是贡献了

于是只要解决一个形如\(\sum_iA+\lfloor\frac{i}{B}\rfloor\)的柿子,可以\(O(1)\)

不想写,摆了

ARC124E

代数终究败给了组合意义

首先易得一定有一个位置没有传球给下一个人

所以方案数就是总方案-每个人至少传一个球的方案

然后考虑\(\prod x_i\)的组合意义,其实就是每个人从自己的球中选出一个的方案数

这个球可以从自己没有传出去的球中选,也可以从前一个人给他的球中选

于是可以设个\(dp\)解决

事实上还有更暴力的sol

直接设\(f_{i,j}\)表示第\(i\)个人给\(j\)个球的前缀积

然后钦定\(i\)前面的人必须给球,最后累加\(f_{i,0}\)

经过大力优化,用矩阵维护也可以做到\(O(n)\)

ARC125F

我们希望有一个强大的结论便于计数

具体来说,最好是合法的有序对是连续的

\(a_i=d_i-1\),那么\(\sum a_i=n-2\)\(a_i\)的不同的值的个数为\(O(\sqrt n)\)个)

\(L(k)\)表示凑出\(k\)所用\(a\)的最少数的个数,\(R(k)\)表示最大

结论就是:\((c,k)\)合法当且仅当\(L(k)\le c\le R(k)\)

证明:

\(0\)的个数为\(z\),那么\([L(k),L(k)+z]\)显然合法,\([R(k)-z,R(k)]\)同理

于是原命题等价于\(L(k)+z\ge R(k)-z-1\)\(R(k)-L(k)\le 2z+1\)

\(y-x\)相当于每个物品权为\(a_i-1\),所以\(y-x\in[-z,z-2]\)

所以\(k-L(k),k-R(k)\)也在区间中,故得证

于是现在直接做单调队列优化背包就行了

ARC126E

\(F=\sum_{i<j}|A_i-A_j|\)

假设\(A_{i}<A_{j}\),且不存在\(A_{i}<A_k<A_j\)

那么对\(A_i,A_j\)的操作,会使\(F\)恰好减少\(2x\)

否则\(F\)减去的一定大于\(2x\)

于是有\(\lim_{n\to+\infty}f(x)\le \frac{F}{2}\)

同时,我们一定可以让\(F\)趋近于\(0\)

所以不等号改为等号

随便维护一下就行了

ARC127D

很妙地运用了异或的性质

不等关系可以和异或关系转换

首先令\(C_i=A_i\oplus B_i\)

那么对于\(A_i\oplus A_j\)\(B_i\oplus B_j\),它们第一位不同的地方就是\(C_i\oplus C_j\)的最高位

于是我们对\(C_i\),建\(Trie\),然后在树上算答案

可以发现当枚举到某一位不同时,可以快速算答案

具体地,只用维护\(A,B\)在这一位的四种情况的各个二进制位

于是就是\(O(N\log^2A)\)的了

ARC127E

难点在于猜结论(确信

显然是要判定是否能删除某个集合

可以感受到,从小往大删,尽量靠后是比较优的

具体实现就是从后往前扫

如果\(X_i=2\)就给计数器加\(1\)

如果\(X_i=1\),若此时计数器大于\(0\),就减去\(1\),并在这里标记为要插入删除的数的位置

剩下的\(dp\)是简单的

ARC128D

可以发现交替的段是独立的

因为两段交替段的相交位置肯定可以随便删,而两边的删除互不影响

于是我们对一个交替段进行\(dp\)

可能要分讨一下交替段的左/右端放了什么

没写,先摆了

ARC129C

可以考虑直接用\(7777\cdots 7\)的连续段去拆分

一段长为\(n\)的贡献是\(\frac{n(n+1)}{2}\)

也就是说每次会递减至\(\sqrt{n}\),即段数是不多的

所以我们直接构造,每次给之前的余数乘\(3\),再判一判就好了

ARC130D

首先很容易发现只有两种大小关系

我们上树形\(dp\)

对于枚举的当前点,它和所有儿子的关系都是一样的

所以我们可以先在儿子的\(dp\)中找到它们的相对位置关系

然后钦定当前点的位置,再插进去

\(f_{u,i}\)表示\(u\)在它的子树构成的排列中排第\(i\)

那么我们可以通过枚举儿子选出多少个放在\(u\)的前面/后面

写出柿子发现有个卷积 我直接写了个带优化的\(O(n^3)\)艹过去了

ARC132D

可以用反证法(也许 每个\(1\)一定是处在和他相对应的\(1\)构成的区间中的

于是我们可以贪心,也就是要让\(1\)的连续段最少

将区间排序

那么一个\(1\)要么挨着放,要么放最右边(我想到这里居然还写了个\(dp\)

最后再对第一个\(1\)的位置分讨一下就行了

ARC133F

这就是组合意义吗

首先用组合意义转化成有\(n\)个硬币,初始\(i\)个朝上的概率为\(p_i\),每次随机选一个翻转

最后求正面朝上硬币的期望个数

这样的好处是可以将贡献独立开来

简单推导一下

\(F=\sum\frac{y^{2i}}{(2i)!}=\frac{e^y+e^{-y}}{2}, G=\sum\frac{y^{2i+1}}{(2i+1)!}=\frac{e^y-e^{-y}}{2}\\\)

\[\begin{aligned} P(x)&=\frac{k!}{n^k}[y^k]\sum_{i=0}^np_i(xF+G)^i(F+xG)^{n-i}\\ &=\frac{k!}{2^nn^k}[y^k]\sum_{i=0}^np_i(x(e^y+e^{-y})+e^y-e^{-y})^i(e^y+e^{-y}+x(e^y-e^{-y}))^{n-i}\\ &=\frac{1}{2^nn^k}\sum_{A}\sum_{B}\sum_{i=0}^n\binom{i}{A}\binom{n-i}{B}(2A+2B-n)^kp_i(x+1)^{A+B}(x-1)^{n-A-B}(-1)^{n-i-B}\\ &=\frac{1}{2^nn^k}\sum_ic_i(x+1)^i(x-1)^{n-i} \end{aligned} \]

对于\(c_i\)也有类似的形式

\[\begin{aligned} H(x)&=\sum_{i}p_i(x-1)^i(x+1)^{n-i}\\ c_i&=(2i-n)^k\sum_{j}\sum_{A}\binom{j}{A}\binom{n-j}{i-A}(-1)^{n-j-i+A}p_j\\ &=(2i-n)^k(-1)^{n-i}\sum_{j}(-1)^jp_j\sum_{A}\binom{j}{A}\binom{n-j}{i-A}(-1)^{A}\\ &=(2i-n)^k(-1)^{n-i}[x^i]H(x) \end{aligned} \]

第一眼看过去是分治

但是显然不用这么麻烦

直接换元令\(t=x-1\),于是就能单\(\log\)

ARC134E

博弈还能这么玩

为了便于分析,可以把重复的元素以及\(0\)去掉

首先\(S=\{1\}\)\(S=\{2\}\)是必败的

然后\(S\)中含有奇数是必胜的(操作\(m=2\)

现在考虑所有元素模\(4\)的结果

如果有模\(4\)\(2\)的数,那么是必胜的(操作\(m=4\)

现在再考虑对\(3\)取模的结果

可以发现只有两种情况:

1.\(S=\{4,8\}\)(这是必败的)

2.所有元素都是\(3\)的倍数

可以发现,我们只需要对所有数为\(12\)的倍数算答案,可以记搜

ARC135D

可以发现对于第\(i\)行,\(\sum_{j=1}^m(-1)^{i+j}a_{i,j}\)不变,列同理

故我们得到了一个必要条件

显然我们可以逐位确定,所以这是一个充要条件

然后贪一贪算一算就做完了

ARC135E

打个表观察一下

发现\(\frac{a_i}{i}\)形成了一些等差数列

大胆猜等差数列个数不会太多(官方证明为\(O(X^{\frac{1}{3}})\)个)

于是可以二分写写柿子出位置,然后这一段的贡献可以用公式\(O(1)\)

复杂度未知

ARC135F

第一步是设\(f(i)\)表示操作一次后\(i\)上的数,即\(f(i)=\lfloor\frac{3i+1}{2}\rfloor\)

并设\(f^k(x)=f^{k-1}(f(x))\)

\(k\)比较大的时候,直接用这个暴力,复杂度就是\(O(nk(\frac 2 3)^k)\)

\(k\)比较小的时候,我们需要另辟蹊径

观察\(f^k(n+2^k)=f^k(n)+3^k\),可以归纳证明

于是\(f^k(n+i2^k)=f^k(n)+i3^k\)

然后我们考虑折半,令\(x=\lfloor\frac{k}{2}\rfloor,y=k-x\),那么\(f^k(n)=f^y(f^x(n))\)

然后我们可以枚举\(i\mod 2^x\)的值

接下来就倍增+记忆化,那么这部分复杂度就是\(O((k+\log n)2^{\frac{k}{2}})\)

ARC137F

事实上,我们不关心随机出来的值是什么,我们只需要知道大小关系

所以可以将坐标离散下来

然后转化为有\(n\)\(+1\)\(n\)\(-1\),任意时刻前缀和\(\ge 0\)\(\le k\)

然后要将\(+1\)\(-1\)配对

我们假设\(n\)\(+1\)的位置的前缀和为\(x_1,x_2\cdots x_n\)

于是有如下条件:

1.\(x_i\in[1,k]\)

2.\(x_i\le x_{i-1}+1\)

3.\(x_1=1\)

条件2可以写出\(dp\)形式,然后矩阵优化

如果选择对条件\(2\)容斥的话,就是\(O(n\log n+k\log^2k)\)

可以用OEIS做到\(O(n\log n)\)

ARC139C

奇妙构造题

考虑\(x+3y,3x+y\)什么时候会增加\(1\)

\((i,j)->(i,j+1),(i+1,j),(i+2,j+1),(i+1,j-2)\)

于是可以构造许多\(3*3\)的矩形接在一起

\(n=m\)且为偶数时,可以证明达到上界\(4(n-1)\)

否则可以证明达到上界\(3n+m-3\)(假设\(n<m\)

ARC140D

对树和环分讨,然后拆贡献

对一棵树单独考虑,发现可以分治\(NTT\),于是做完了

ARC140F

这种题也能放F???

恰好\(k\)个位置肯定是不好做的,考虑二项式反演

\(i\%m\)分组,每个组内相当于选连续段

\(x\)计数序列长度,\(y\)计数连续段个数

对于一个\(>1\)的段,可以对其翻转

于是可以以写出

\[\begin{aligned} F(x)&=\frac{1}{1-y(\frac{2x}{1-x}-x)}\\ &=\frac{1}{1-y\frac{x+x^2}{1-x}}\\ &=\frac{1-x}{1-(x+y(x+x^2))}\\ \end{aligned} \]

如果对其提取\([x^t]\)

就得到了

\[(1+y)^{-t}\sum_{i=0}^t\binom{i}{t-i}y^{t-i}(1+2y+y^2)^{i}\\ \]

是一个经典的分治问题

每次形如给区间左边乘一个\(y\)的次幂,给右边乘一个\(1+2y+y^2\)的次幂

最后再做一下差卷积就行了

ARC141D

这个题最重要的在于\(A\)的范围

可以看到上界是\(2M\),而我们要选出的集合大小为\(M\)

这启发我们先把\(2\)的因子提出来

所以将每个数写成\(2^ab\),对于一个\(b\),我们只会在所有对应\(a\)中选一个

同时,我们对于所有的\(b\)会恰好选择一个(因为上界的缘故)

顺着这个思路往下,可以观察到,对于\(2^{a_1}b_1\)\(2^{a_2}b_2\)

如果\(b_2|b_1\),那么有\(a_2>a_1\)

于是我们可以从最小的\(b\)开始选,得出每个\(b\)对应的上界

反过来从最大的\(b\)开始,就可以得出每个\(b\)对应的下界

最后只要判断是否在上下界中就可以了

ARC143D

先把二分图的形式画出来

发现就是让所有环按顺序遍历

直接dfs一遍就行了

ARC144D

脑袋秀逗做了3h。。。

首先我们有递推的思想,确定了前\(2^i\)个数,现在要确定前\(2^{i+1}\)个数

我们令\(1a\)表示\(a+2^{i}\),那么有

\[\begin{aligned} f(x)+f(y)&=f(x\ and\ y)+f(x\ or\ y)\\ f(1x)+f(y)&=f(x\ and\ y)+f(1(x\ or\ y))\\ f(x)+f(1y)&=f(x\ and\ y)+f(1(x\ or\ y))\\ &=f(1x)+f(y)\\ f(1x)-f(x)&=f(1y)-f(y)\\ \end{aligned} \]

也就是说,我们要给前\(2^i\)个数全部加上一个相同的数

令第\(i\)次操作加上的为\(x_i\)\(a=\sum [x_i<0]x_i,b=\sum [x_i>0]x_i\)

于是有\(0\le f(0)+a,f(0)+b\le k\),即\(-a\le f(0)\le k-b\)

变成算\(b-a\le k\),即\(\sum |x_i|\le k\)

拿个GF算一算就行了

ARC146C

考虑增量

我们现在需要往当前集合\(T\)中加数

那么就需要算出有多少数是不能放的

也就是\(T\)中所有大小为奇数的子集的异或和

这个方案是\(2^{|T|-1}\)

验证一下会不会重:

设两个不同的大小为奇数的子集为\(S1,S2\)

\(S1,S2\)中没有相同的数,且\(S1\oplus S2=0\),那么由于\(|S1|+|S2|\)是偶数,矛盾

\(S1,S2\)中有相同的数,就把这些数去掉,此时\(|S1|+|S2|\)仍然是偶数,矛盾

然后\(dp\)随便算一算就行了

ARC146D

比较神秘的题

将条件转化一下

变成\([[A_{P_i}<X_i]=[A_{Q_i}<Y_i]]\and[[A_{P_i}<X_i+1]=[A_{Q_i}<Y_i+1]]\)

然后令初始序列为\(1\),然后根据上面的条件不停调整

事实上可以说明(可能),这种调整在有解时一定最优,且调整顺序无关

于是可以写个类似spfa的东西跑一跑

ARC147D

裂开了

你考虑这么一件事,就是说,用\(x_2\cdots x_n,s_1\),表示出所有的集合

\(x\)即相邻集合中,恰好存在于其中一个的那个数,这样显然是一一对应的

由于是算总贡献,所以再做一些观察

\(A_i\)表示\(S_1\)包含\(i\)时,包含\(i\)的集合数,设\(B_i\)表示\(S_1\)不包含\(i\)时的

因为有\(A_i+B_i=N\)(一定存在一种“互补”的方案),所以这一部分的贡献是\(N^M\)

然后\(x_2\cdots x_n\)的贡献就是\(M^{N-1}\),乘起来就是答案

ARC148E

静下心来做还是不难的

把数分为\(<\frac k2\)\(\ge\frac k2\)两类

小数往右扫,大数往左移

每次可以认为是在一些数的间隙中插入数

假设原空隙数为\(S\)

当插入\(t\)个大数时,乘上\(\binom{S+t-1}{t}\)\(S\)变为\(S+t\)

当插入\(t\)个小数时,乘上\(\binom{S}{t}\)\(S\)变为\(S-t\)

ARC149D

一个重要的观察是:\(x\)\(-x\)的答案互为相反数

于是我们维护一个连续的区间,以及区间左端点的坐标

每次如果出现区间中有数达到原点,就把它删除

然后比较左右两段长度,将小的一段向大的那段连边,即连边的两个点的答案互为相反数

再将小的那段删除

最后从根开始搜一下就行了

ARC150D

期望套路题

有一个很常用的技巧:

当前全集的权为\(S\),子集的权为\(P\)

那么在子集中随机等价于在全集中随机,若选到不是子集的就重新随机

证明:

考虑对于一个元素\(A\)

情况\(1\):显然有\(P(A)=\frac{w_A}{P}\)

情况\(2\)\(P(A)=\frac{w_A}{S}+\frac{S-P}{S}P(A)=\frac{w_A}{P}\)(即要么打中,要么在补集中且重新选)

本题中,设\(E(X_i)\)表示把\(i\)染黑的期望次数,则\(Ans=\sum E(X_i)\)

根据结论,我们可以进行几步转化:

1.对于每个点只保留链

2.不考虑在bad点中随机的限制

于是对于长为\(n\)的链就是\(\sum_{i=1}^n\frac{1}{i}\)

ARC154D

小清新交互题

可以考虑一个找\(1\)的过程

如果\(P_i+P_i\le P_x\),就令\(x\gets i\)

然后观察到所有数互不相同,所以\(a+1>b\)就可以看成\(a>b\)

于是直接把询问放进sort的cmp里面就可以了

ARC154E

不难发现\(f(P)=\sum i(i-P_i)\)

然后我们考虑\(i\)在一次操作后变成\(j\)的方案数

也就是\(\min(i,j,n-i+1,n-j+1)\)

\(j\)替换成\(n-j+1\)结果一样,也就是具有对称性

于是只要被操作,期望就是\(\frac{n+1}{2}\)

否则就是原来的位置

然后随便算一算就行了

ARC154F

Binomial Sums的套路

首先做个Min-Max容斥

可以得到

\[F(x)=\sum_{i=0}^n\binom{n}{i}(-1)^{i-1}\frac{\frac{i}{n}x}{1-\frac{n-i}{n}x} \]

因为要算\(k\)次方和,所以把\(x\)换成\(e^x\)

于是有

\[G(x)=\sum_{i=0}^n\binom{n}{i}(-1)^{i-1}\frac{ie^x}{n-(n-i)e^x} \]

直接看成对\(e^x\)的复合是做不了的

但是我们知道,只要去掉常数项就可以复合了

于是令

\[H(x)=\sum_{i=0}^n\binom{n}{i}(-1)^{i-1}\frac{i+ix}{i-(n-i)x}\\ P(x)=H(x-1) \]

现在只需求\(P(e^x)\)

再转成OGF,于是就是算\(\sum_{i=0}^m\frac{p_i}{1-ix}\)

于是只需做两个分治NTT,一次差卷积

ARC155F

给一个好想不好写的做法,参考EI做法

首先令一条边的权为\(x_i+x_j\),建完全图

然后写出其拉普拉斯矩阵,要算的就是求行列式后的\(\prod_{i=1}^nx_i^{D_i}\)这一项

然后可以利用矩阵行列式引理

令原矩阵为\(D+AB^{\text{T}}\)\(D\)是对角矩阵

\(A\)的第一列为\(x_i\),第二列为\(-1\)\(B^{\text{T}}\)的第一行为\(-1\),第二行为\(x_i\)

\(s=\sum_{i=1}^{n-1}x_i\)

经过大力推导,得到了

\[\prod_{i=1}^{n-1}(nx_i+s) -2\sum_{i=1}^{n-1}x_i\prod_{i\not =j}(nx_j+s)+ \sum_{i<j}(2x_ix_j-x_i^2-x_j^2)\prod_{k\not =i,k\not =j}(nx_k+s) \]

以第一项为例,可以变成

\[\sum_{T}n^{|T|}s^{n-1-|T|}\prod_{i\in T}x_i \]

也就是快速计算

\[\prod_{i=1}^{n-1}(1+D_ix) \]

后面的都是类似的

ARC156F

先考虑另一个问题

假设每个\(i\)可以选择不向集合加入数,那么可以源点向第一组限制连边,第二组限制向汇点连

然后各自的限制向对应的数连(对数拆点)

那么最大流就是答案

一个nb的结论就是:

这个问题的答案就是原问题的答案

通过画图可以发现,每次增广如果选择最短的增广路,一定不会使已经选择的限制退流

所以可以先全部选\(A_i\)构造出残量网络,然后一直增广

由于dinic每次选最短的增广,所以直接上板子就行了

AGC005F

远古F好水

首先把子树大小贡献转化成每个点的贡献

然后再容斥,设一个点连出去的连通块大小为\(s_1,s_2\cdots s_c\)

则方案数为\(\binom{n}{k}-\binom{s_1}{k}-\binom{s_2}{k}\cdots \binom{s_c}{k}\)

将所有这些联通块大小求出来,记为\(a_i\)

于是对于一个\(k\),我们要快速算出\(\sum \binom{a_i}{k}\)

构造多项式,即\(f(x)=\sum(x+1)^{a_i}\)

于是可以考虑计算\(f(x-1)\),这一步是容易的

然后就是多项式平移,一次差卷积就可以了

AGC013D

首先可以发现,盒子中的总球数是保持不变的

于是可以设\(f_{i,j}\)表示前\(i\)次操作执行完,盒子中有\(j\)个黑球的方案数

那么当\(j>0\)时,可以转移到\(f_{i+1,j-1},f_{i+1,j}\)

\(j<n\)时,可以转移到\(f_{i+1,j},f_{i+1,j+1}\)

考虑如何去重

把黑球数想象成一条折线

在折线往上/下移动的同时(即序列同时加上或减去一个数),我们可以得到相同的序列

而球数有\(\ge 0\)的下界,所以计数最小值为\(0\)的黑球数序列就一定可以不重不漏地计数

随便加一维放进\(dp\)状态里面就行了

AGC019E

不算特别难的图论建模

把上下同时为\(1\)的称为\(A\)类点,上\(1\)\(0\)的为\(B\)类点,上\(0\)\(1\)的为\(C\)类点

同时在排列中钦定上面向下面连边

则边有四种\(A->A,A->C,B->A,B->C\)

对应的图有两种:

1.\(BAC\)形成的链,其中\(A\)的个数任意,且链恰有\(|B|\)

2.\(A\)形成的环

可以发现的是,环不会对前后两个序列是否相等产生影响

于是我们思考链的排列方式有多少种

事实上,链的操作顺序只会是从尾至头,否则这个链会断开来,\(0\)就不会交换到\(B\)的位置

所以假设一条链有\(x\)\(A\)\(A\)的排列方式就是\(x!\)

然后可以计数了

枚举有多少个\(A\)类点放进了链中

跳过有限步得到\(|A|!|B|!(|A|+|B|)!\sum_{p=0}^{|A|}[x^p](\frac{e^x-1}{x})^{|B|}\)

暴力一点就\(O(n^2)\)算答案,也可以NTT做到\(O(n\log n)\)

AGC023E

发现自己并不擅长读入量大于\(O(1)\)的计数

首先考虑一个简单的问题,怎么在这个限制条件下算排列数

按照\(a\)从小到大放,然后第\(i\)个会有\(i-1\)个的占位

\(a_i\)的排名为\(b_i\),于是就是\(S=\prod a_i-b_i+1\)

然后套路拆贡献,假设有一组\(i<j,a_i<a_j\)

贡献为\(\frac{(a_i-b_i)S}{2(a_j-b_j+1)}\prod_{k=b_i+1}^{b_j-1}\frac{a_k-b_k}{a_k-b_k+1}\)

反过来可以容斥,也是类似的

接下来只需用线段树维护全局乘,单点改

AGC027D

先考虑如果是允许整除怎么做

那么先黑白染色

然后黑点选不同的质数,白点为四周黑点的\(\text{lcm}\)

但是这样算出来的数太大了

所以考虑让一些黑点有公因数

于是可以想到对每条斜线乘上不同的质数

显然这样仍满足每个数不同

由于最终答案不能为整除的,所以只要再给白点\(+1\)就行了

AGC028F1

感觉不难但就是没想到,读完题解有种醍醐灌顶的感觉

考虑一个点\((i,j)\),令其能走到第\(k\)行最左端的为\(L_{k,i,j}\),最右为\(R_{k,i,j}\)

最理想的情况就是\(L-R\)中的点都能走到,那么直接前缀和算一算就行了

但是我们会出现一个格子,上边和左边是障碍物

那么其左上角的所有格子都走不到它

可以发现的是

我们在倒序扫的过程中,只要把这种情况一点点向外扩展然后暴力改前缀和就行了

AGC031E

可以直接单纯形

可以考虑费用流

以条件一为例,不妨转化为排名\(>b_i\)的数都\(>a_i\)

但这依然不明朗

暴力一点,直接枚举选了多少个数

实际上,我们的限制是单调的

所以就算选出来的数不是单调的,也可以交换位置

于是可以只用考虑第\(i\)个数的坐标范围

然后随便建下图跑个最大费用最大流就行了

AGC036E

考虑如果没有相邻不同的限制

那就是\(\min(cnt_A,cnt_B,cnt_C)\)

把限制加上,不妨假设\(cnt_A\le cnt_B\le cnt_C\)

先删去\(ACB,BCA\)以及开头,结尾的\(C\)

如果仍然有\(cnt_B<cnt_C\)

就删除\(AC,CA\)

最后删去\(BC,CB\)

AGC038E

首先考虑\(Min-Max\)容斥

问题变成对于所有集合,求第一次使得其中任意元素出现\(b_i\)次的期望次数

可以先写出一个组合在一起的生成函数

\[(-1)^{|S|-1}\sum_{A\in S}\frac{p_A^{b_A}x^{b_A}}{(b_A-1)!}\prod_{B\in S,A\not=B}\sum_{i=0}^{b_B-1}\frac{p_B^{i}x^i}{i!} \]

注意这里是\(EGF\),最后\(x^i\)项要乘\((i-1)!\)

对于连乘符号那一部分,可以先\(O(n^3)\)求出(带上\(-1\)的权)

然后枚举最后出现的数,即前面那一部分

这里可以解一个\(F(y^kG+1)=H\)的方程,总复杂度仍然是\(O(n^3)\)

令选出集合的概率和为\(S\)

考虑对于没选到集合中的数,实际上就是将\(F(x)\)变为\(F(\frac{x}{1-(1-S)x})\)

求导,代入\(x=1\)\(F'(\frac{1}{S})\frac{1}{S^2}\),同样可以\(O(n^3)\)计算

AGC041F

容斥流

先容斥:

假设钦定了\(k\)个格子没被覆盖

那么就是\((-1)^k\)的系数,剩下的格子都有个\(2\)的贡献

但是统计剩下的格子有多少个不好做

考虑一个列集合\(S\),其中的格子均不能被覆盖

对于一个行连续段,假设长为\(len\),在\(S\)中的格子数目为\(p\)

那贡献有两种:

1.不填\(S\)中的格子,即\(2^{len-p}\)

2.填\(S\)中的格子,那么其它位置不能放車,即\(\sum_{i\ge 1}\binom{p}{i}(-1)^i=-[p>0]\)

但是发现还是会算重,因为要保证\(S\)中每一列至少填一个

仔细思考一下,这又是一个容斥能解决的问题

再容斥:

再设\(T\subset S\),容斥系数为\((-1)^{|T|}\),钦定\(T\)中的列不填

设行连续段在\(T\)中有\(q\)个,于是贡献\(2\)变为\(-[p-q>0]\)\(-[p\not =q]\)

现在只要建笛卡尔树,然后设一个\(f_{u,p,[p=q]}\)做树形\(dp\)就行了

AGC047C

太生草了

先把每个数变成原根的次幂,然后只需要在指数上做卷积就行了

AGC058D

容斥博大精深

最初的想法是,连续段长度为\(c\),则贡献\((-1)^{c-2}\),但是不是很好算

改一下容斥方法,钦定有\(c\)个位置不合法,被钦定的限制可以形成连续段

假设连续段长为\(i\),那么\(f(i)=-(f(i-1)+f(i-2))\)

即,在\(i-2\)的位置新加一个钦定位置,然后之前的段得延伸到\(i-1\)或者\(i-2\)的位置

于是得到的系数为\(1,0,-1\)的交替

写生成函数\(\frac{1}{1-\frac{x+y+z-3xyz}{1-xyz}}\),可以\(O(n)\)计算

AGC060D

Alpha1022:这题很简单

\(g(S)\)表示大于号集合为\(S\)\(S\)之外均为小于号的方案数

于是答案就是\(\sum_Sg_S^2\)

然后稍微做一个容斥

\(f(S)\)表示钦定\(S\)为大于号,其它任意

于是\(g(S)=\sum_{S\subset T}(-1)^{|T|-|S|}f(T)\)

稍微推一下柿子

\[\begin{aligned} \sum_S g_S^2&=\sum_{S}(\sum_{S\subset T}(-1)^{|T|-S|}f(T))^2\\ &=\sum_S\sum_{S\subset T_1}(-1)^{|T_1|}f(T_1)\sum_{S\subset T_2}(-1)^{|T_2|}f(T_2)\\ &=\sum_{T_1}(-1)^{|T_1|}f(T_1)\sum_{T_2}(-1)^{|T_2|}f(T_2)2^{|T_1|\cap|T_2|}\\ &=\sum_{T_1}(-2)^{|T_1|}f(T_1)\sum_{T_2}(-2)^{|T_2|}f(T_2)(\frac{1}{2})^{n-1-\sum_{i}[i\notin T_1\and i\notin T_2]} \end{aligned} \]

注意到\(|T|=n-1-\sum_{i}[i\notin T]\),于是可以理解为一个段的贡献为\(\frac{1}{2}\)

把这些只跟\(n\)有关的先提出去

于是设\(H=\frac{1}{1-(-\frac{1}{2})(e^x-1)}\)\(G[i]=H[i]^2\)

现在还需要考虑\(\sum_{i}[i\notin T_1\and i\notin T_2]\)的贡献

这些位置将原序列划分为许多段,满足每段每个位置\(i\)满足\(i\in T_1\or i\in T_2\),设每段为\(F(x)\)

通过枚举第一个\(i\notin T_1\and i\notin T_2\)的位置,得到\(G=F+FG\),于是\(F=\frac{G}{1+G}\)

答案就是\((n!)^22^n[x^n]\frac{1}{1-2F}\)(这里变成了\(2^n\)是因为\(n\)\(n+1\)之间的符号实际上并不存在)

posted @ 2022-08-08 16:50  冰雾  阅读(50)  评论(0编辑  收藏  举报