计数练习

计数练习

CF840C On the Bench

考虑\(xy,xz\)是完全平方数,\(yz\)同样也是

于是我们可以对此划分等价类,每个等价类里的数不能相邻

我们发现在插入一个等价类后一些不合法的也可能变合法,因此我们这里要记录一些不合法的信息

考虑\(dp_{i,j}\)表示前\(i\)个等价类中有\(j\)个不合法的对,这里先在等价类里消序

考虑插入了\(x\)个数,我先把他们放一起,然后砍\(i\le x-1\)

考虑枚举\(p\le min(i+1,j)\)为放入不合法对的段即可

时间复杂度是\(n(\sum a_i)^2\)

似乎有\(log\)的多项式

[CTSC2017]吉夫特

直接\(Lucas\),然后你会发现\(i+1\)\(i\)的子集

然后呢,因为每个数的大小不一样,可以直接枚举值,枚举它的子集刷表就行了

[AGC009C]Division into Two

考虑对序列划分成若干个连续段,每个连续段都放入\(A\)\(B\)

\(dp_{i,0}\)为第\(i\)位放\(A\),且前面放\(B\),\(1\)同理

然后你会发现\(dp_{i,0}=\sum_{j\in[L,R]}dp_{j,1}\),这个\(L\)保证\([L,i-1]\)\(B\)满足条件,\(R\)保证\(S_i-S_{R-1}\ge A\),都可以二分求

最后的答案可以在后面放一个极大值统计

CF1383E Strange Operation

一个非常有意思的题

可以发现我们的操作等价于在连续的\(0\)段删一个,或在连续的大小\(>1\)\(1\)段删一个

我们考虑记录一个序列\(A\)为原串每对相邻\(1\)\(0\)的个数,这里我们在开头和结尾都放一个\(1\)

可以发现这个\(A\)和原串一一对应

然后操作在\(A\)就体现为\(A_i-1\)或直接删除一个\(A_i=0\)\(i\)

一个合法的由\(A\)操作出来的\(B\)满足除开头结尾,中间的序列可以在\(A\)上找到一个子序列使\(A_{p_i}\)都大于\(B_i\)

然后如果要对\(B\)记数,不难想到\(A,B\)匹配,对\(A\)\(dp\)\(A,B\)可以匹配的位置有很多

这里我们贪心地让\(B\)找最前面\(A_x>B_i\)\(x\),这样如果\(B\)是合法的一定是找得到的,并且唯一

直接\(dp_i\)表示\(B\)匹配了\(A_i\),填了\(y\),不难想到\(j\Rightarrow i\)只需满足\(x\in[j+1,i]\)没有\(A_x>y\)

这里对\(y\)直接维护最大的\(j\)即可

[AGC043B] 123 Triangle

降职了

手玩一下就会发现这个\(3\)是不会作为答案的

如果第一次差分后出现\(1\),那最后的答案只能是\(1/0\),因为\(0,2\)碰到\(1\)都会变成\(1\),最后的答案一定会消去\(2\)

我们直接对序列\(\bmod 2\),然后减法变加法

观察到\(f_{i,j}=f_{i-1,j}+f_{i-1,j+1}\)

这个很想杨辉三角的形式,事实是这个的系数是\(\binom{i-1}{n-1}\)

然后直接用\(Lucas\)算就好了

如果没有\(1\),直接\(/2\)即可

[HNOI2011] 卡农

这个偶数的条件并不是很好处理如果是抽象为二进制串复杂度起飞

这里提出一个大胆的\(dp\)设计

\(dp_i\)为前\(i\)个位置满足条件的方案,这里我们钦定每个串之间是有顺序的

因为知道了前\(i-1\)个那第\(i\)个也是可以直接推出来的,这里我们先不考虑不合法的方案,总方案为\(A_{2^n-1}^{i-1}\)

考虑不能为空等价于前\(i-1\)不能满足条件,即要减去\(dp_{i-1}\)

再考虑第\(i\)个不能和前面的一个\(j\)相同,那就等价与\(i-2\)就满足条件

也就是\(dp_{i-2}(i-1)(2^n-1-(i-2))\),可以发现这样前\(i-1\)一定是不合法的,因此和上面的没有算重

然后最后就完了,甚至不须考虑偶数位的限制

[AGC043D] Merge Triplets

成小丑了

首先不难看出这个题我们最后得出的序列是大致单调递增的,只有大概\(3\)个跟在单调子序列其其中的\(i\)后面

然后\(dp\),委了,因为每个数后面跟\(2\)个数的块要小于等于\(1\)的块数

如果把这个也设计进状态就好像会超时

然后\(nb\)的地方来了

\(dp_{i,j}\)为前\(i\)个位置\(2\)的块数减\(1\)的块数为\(j\)且只考虑\(i\)以内的数

枚举最后一个的大小为\(1,2,3\)

然后你会发现大小为\(2\)时我们直接调整\(i-1\)里的数,放一个在\(i\),\(i-1\)\(i\)即可,因为\(i\)一定时最大的

\(3\)的也同理

[AGC052C] Nondivisible Prefix Sums

这个如果没有重排的条件,不难发现这里我们可以直接\(dp\)

但这里的重排就把每个序列特殊化了

首先我们的序列全部乘上\(x\)肯定是不会影响它的好坏的

这里先剔除\(Sum\bmod P\equiv0\)

考虑找出\(x\)是众数,考虑对整个序列乘一个\(x^{-1}\),这里就只剩下\(1\)最多

结论:\(1\)的个数小于等于\(\sum\limits_{i=1}^{k}(P-B_i)+P-1\),\(B\)是所有非\(1\)数组成的序列是原题的充要条件

必要性不难证

对于充分性,我们考虑这样重排序列

取出当前序列的众数\(x\)

如果\(Sum+x\bmod P\equiv 0\),就找另一个数\(y\)来填,否则就用\(x\)

唯一冲突的时候就是只有\(x\)的时候且\(x\ge2\)

我们可以发现如果众数变了,那么一定不会出现上述情况,因为相当于交替取数

所以对于众数一直是\(1\)的情况,可以发现我们只需要在用\(B_i\)后面填一下即可,最前面填\(P-1\)

然后我们计数的话就考虑先选那些\(Sum\not\equiv(0)(\bmod P)\)的,再考虑剔除不合法的

然后我们设\(dp_{i,j}\)为选了\(i\)个非\(1\)的数,和为\(j\),转移就是背包

然后我们直接枚举每个\(i,j\),不合法的就是\(n-i>j+P-1\),注意\(n-i-j\not\equiv0(\bmod P)\)

[ABC214G] Three Permutations

\(yjx\)教育了/kk

考虑只有一个序列\(P\),很明显就是错排

如果有两个序列,我们同样可以枚举冲突的数量容斥,问题在于冲突的位置可以是与\(P_i\)也可以是与\(Q_i\)

如果我们考虑\(P_i,Q_i\)连边,把冲突看作一条边,那我们就可以给边定向

进一步,这个\(P_i\),\(Q_i\)连边连出来的就是若干个环,我们可以在环上跑\(dp\)

这个\(dp\)模型很经典,\(dp_{i,j,0/1,0/1}\)为前\(i\)个选\(j\)条冲突边,\(i\)是否往前指,\(1\)是否往后指

这个跑出来的东西我们可以用背包合并

[CF997C] Sky Full of Stars

这里先不考虑列的贡献,行可以整个矩阵就可以

直接容斥\(\sum\limits_{i=1}^n(-1)^{i+1}\binom{n}{i}3^{i}\times3^{n(n-i)}\)

对于列,我们这里计算列做贡献且行不贡献

\(f(i)\)为有\(i\)个列被选涂,剩下的不能有一整行被涂的方案

再容斥一下。。。。算了

这里我们计算一个行和列同时被染的方案,最后减一下就行了

直接容斥行和列,容斥系数是\((-1)^{i+j}\)

\(\sum\limits_{i=1}^n\sum\limits_{j=1}^m(-1)^{i+j}(3^{(n-i)(m-j)+1})\binom{n}{i}\binom{m}{j}=\sum\limits_{i=1}^n3(-1)^n\binom{n}{i}\sum\limits_{j=1}^{m}3^{(n-i)(m-j)}\binom{m}{j}(-1)^j\)

观察一下后面的式子,不难看出是二项式定理

\(\sum\limits_{i=1}^n3(-1)^n\binom{n}{i}((3^{n-i}-1)^m-3^{(n-i)m})\)

CF1264D2 Beautiful Bracket Sequence (hard version)

\(orz sjg\)

首先我们解决何时取最大

枚举一个中间位置\(i\),答案为\(Max(Min(L_i,R_i))\),\(L_i\)\(i\)左边的左括号,\(R_i\)为右边的右括号

然后你会发现\(L_i\)单增,\(R_i\)单减,这玩意的最值就是\(L_i=R_i\)

注意\(R_i=(n-i)-(L_n-L_i)\)

化一下式子就会发现\(i=n-L_n\)

考虑对每个括号计算贡献

对于左括号,很明显只要\(i\le n-L_n\)即可,则\(?\)选的要小于\(n-L_n-i\),即\(\sum\limits_{i=0}^{n-L_n-i}\binom{cntw}{i}\)

对于问号,差不多,就是\(\sum\limits_{i=0}^{n-L_n-i-1}\binom{cntw-1}{i}\)

这两式子直接预处理就好了

UOJ449

后面的就是生成函数科技了。

首先一眼\(Min-Max\)反演

答案就是\(\sum\limits_{i=1}^n(-1)^{i+1}\binom{n}{i}E_i\),其中\(E_i\)\(i\)个鸽子喂饱其中一个是的期望时间

考虑把这\(i\)个鸽子先提取出来

设有\(x\)个玉米打到了这\(i\)个鸽子且其中有一个被喂饱

这里先计算一下共有\(x\)打到的期望时间,打到一个的概率\(P=\dfrac{i}{n},E=\sum\limits_{i=0}(1-P)^i=\dfrac{1}{P}=\dfrac{n}{i}\)

那打到\(x\)个的期望就是\(\dfrac{xn}{i}\)

对于所有打到\(x\)的方案,合法的就是只有一个被打满\(k\)且是最后实现,能对答案产生\(\dfrac{1}{i^x}\)的贡献

这里我们就要计算所有合法方案数

规定最后一个打到的是\(1\),最后\(\times\dfrac{1}{i}\)即可

那在前面的\(x-1\)中,所有数不能出现超过\(k-1\)次且\(1\)正好出现\(k-1\)

考虑用指数生成函数来描述这个问题,\([x^i]f(x)(i!)\)就是长度为\(i\)合法的方案

那么\(1\)出现的方案就是\(\dfrac{x^{k-1}}{(k-1)!}\),其他数的就是\(\sum\limits_{j=0}^{k-1}\dfrac{x^j}{(j)!}\)

这里考虑有标号的合并,乘起来就是\(f_i(x)=\dfrac{x^{k-1}}{(k-1)!}(\sum\limits_{j=0}^{k-1}\dfrac{x^j}{j!})^i\)

最后的答案就是\(\sum\limits_{i=1}^n(-1)^{i+1}\binom{n}{i}\sum\limits_{j=k-1}^{i(k-1)}[x^j]f_{i-1}(x)(j!)\dfrac{i}{i^{j+1}}\dfrac{(j+1)n}{i}\)

这个式子似乎是\(O(n^2k)\)的,所以要求我们能快速求\([x^j]f_i(x)\)

如果不管前面的\(x^{k-1}\),那就是求\([x^j]g^i(x)=(\sum\limits_{j=0}^{k-1}\dfrac{x^j}{j!})^i\)

不得不说,这玩意长的太想泰勒展开了,不过上限不对

不过对于\(g'(x)=\sum\limits_{j=0}^{k-2}(\dfrac{x^j}{j!})=g(x)-\dfrac{x^{k-1}}{(k-1)!}\)

\((g^{i}(x))'=(i)g^{i-1}(x)g'(x)=(i)g^{i-1}(x)(g(x)-\dfrac{x^{k-1}}{(k-1)!})\)

\(=(i)(g^{i}(x)-g^{i-1}(x)\dfrac{x^{k-1}}{(k-1)!})\)

同时取\([x^j]\)

\([x^{j+1}]g^{i}(x)=\dfrac{(i)([x^j]g^{i}(x)-[x^{j-(k-1)}]g^{i-1}(x)\dfrac{1}{(k-1)!})}{j+1}\)

这玩意大概可以直接递推,然后就完了

UOJ390

感觉可能是和上面那个一样的处理方式

对于第\(i\)列,我们计算放到\(i\)正好\(a_i\)次,其余的\(j\) 放的次数\(\le a_j\)

似乎有点问题,放的不是等概率的

额,换个思路

因为不是等概率,我们尝试鞭尸,即可以选已满的笼子,那最后就是\(i\)最后一个被选的概率

那我们对于\(i\)考虑一个合法序列就是\(i\)正好\(a_i\),其余的\(\ge a_j\)

然后照样枚举选了\(m\)次,一个合法的序列对答案有\(\dfrac{1}{n^m}\)的贡献

这里照样最后合法方案就是\([x^m](\dfrac{x^{a_i-1}}{(a_i-1)!})\prod\limits_{j\not=i}(\sum\limits_{k=a_j}^{\infty}\dfrac{x^{k}}{k!})\)

那对于\(i\)的答案就是\(\sum\limits_{m=N}^{\infty}\dfrac{m!}{n^{m+1}}[x^m](\dfrac{x^{a_i-1}}{(a_i-1)!})\prod\limits_{j\not=i}(\sum\limits_{k=a_j}^{\infty}\dfrac{x^{k}}{k!})=\)

\(\sum\limits_{m=N}^{\infty}\dfrac{m!}{n^{m+1}}[x^m](\dfrac{x^{a_i-1}}{(a_i-1)!})\prod\limits_{j\not=i}(e^x-\sum\limits_{k=0}^{a_j-1}\dfrac{x^k}{k!})\)

这里不妨设\(e^x=y,\sum\limits_{k=0}^{a_j-1}\dfrac{x^k}{k!}=T_{a_j-1}(x)\)

\((x^{a_i-1})\prod\limits_{j\not=i}(y-T_{a_j-1}(x))\),这里我们可以提取到\(y^{\alpha}x^{\beta}\)这一项并计算其贡献

具体的,对于\(y^{\alpha}x^{\beta}\),\(y^{\alpha}=e^{x\alpha}=\sum\limits_{i=0}\dfrac{\alpha^ix^i}{i!}\),提取\(x^\theta\)

\(\theta\)项的贡献为\(\dfrac{{\alpha}^{\theta}x^{\theta}}{(\theta)!}(\dfrac{x^{\beta}}{(\beta!)})=\dfrac{{\alpha}^{\theta}x^{\theta+\beta}}{(\theta)!}\)

直接算\((\theta+\beta)\)这一项,即\(\dfrac{\alpha^{\theta}(\beta!)}{n^{\theta+\beta+1}}\binom{\theta+\beta}{\theta}=\binom{\theta+\beta}{\theta}(\dfrac{\alpha}{n})^{\theta}(\dfrac{\beta!}{n^{\beta+1}})\)

考虑对\(\theta\ge0\)求和

\((\dfrac{\beta!}{n^{\beta+1}})\sum\limits_{\theta=0}\binom{\theta+\beta}{\theta}(\dfrac{\alpha}{n})^\theta\)

考虑\(\sum\limits_{i=0}\binom{n+i}{n}x^i\)

我们可以把他看作有\(n+1\)组全\(1\)的序列卷起来,也即\((\dfrac{1}{1-x})^{n+1}\)

\(x=\dfrac{\alpha}{n}\)代入,即\((\dfrac{\beta!}{n^{\beta+1}})\dfrac{1}{(1-\dfrac{\alpha}{n})^{\beta+1}}=(\dfrac{\beta!}{n^{\beta+1}})(\dfrac{n}{n-\alpha})^{\beta+1}=(\dfrac{\beta!}{(n-\alpha)^{\beta+1}})\)

可以发现每一个\(y^{\alpha}x^{\beta}\)对最后的答案贡献十分简单,我们只需要用背包求出\(y^{\alpha}x^{\beta}\)前面的系数即可,用背包,这里可以先求出所有的再做一次退背包

时间复杂度\(O(n^5)\)

UOJ554

感觉跟上面一道题差不多,先鞭尸

枚举个数\(m\)

枚举一个投的次数\(i\)

然后方案总数就是\(n^i\)

合法的方案就是\(\sum\limits_{m=0}^n\sum\limits_{i=0}\dfrac{\binom{n}{m}[x^i](e^x-\sum\limits_{j=a}\dfrac{x^j}{j!})^{m}(\sum\limits_{j=b}^a\dfrac{x^j}{j!})^{n-m}}{n^i}\)

了这里\(m\)肯定要先固定一下

然后算\([x^i]f(x)=(e^x-\sum\limits_{j=a}\dfrac{x^j}{j!})^m(\sum\limits_{j=b}^a\dfrac{x^j}{j!})^{n-m}\)

这里出现了个\(e^x\),大概还是把它看成一个二元函数算贡献

或者直接两个分开算,然后做个卷积即可

先解决\(g(x)=(e^x-\sum\limits_{j=a}\dfrac{x^j}{j!})^m\)

和上个题一样大概还是算系数吧,不过直接背包是\(n^5\)

分治二维\(fft\)似乎可以做到\(n^3log^2(n)\)

没必要用背包,似乎二项式定理展开就好了\(?\)

\(\sum\limits_{j=a}\dfrac{x^j}{j!}\)看成一个整体二项式展开,然后对每一项算贡献即可

再解决\(h^{n-m}(x)=(\sum\limits_{j=b}^a\dfrac{x^j}{j!})^{n-m}\)

这个和上上一题有点像,不过下限不同

先导一下

\(h'(x)=h(x)-\dfrac{x^a}{(a!)}+\dfrac{x^b}{(b!)}\)

然后\((h^{i}(x))'=(i)h^{i-1}(x)h'(x)=(i)h^{i-1}(x)(h(x)-\dfrac{x^a}{(a!)}+\dfrac{x^b}{(b!)})\)

然后取\(x^{j}\)的系数

\([x^{j+1}](h^i(x))=\dfrac{i[x^{j}]h^{i}(x)-\dfrac{i}{a!}[x^{j-a}]h^{i-1}(x)+\dfrac{i}{b!}[x^{j-b}]h^{i-1}(x)}{j+1}\)

然后最后两个多项式卷一下就可以了,大概得用\(FFT\)

posted @ 2023-06-20 17:30  kid_magic  阅读(15)  评论(1编辑  收藏  举报