计数练习
计数练习
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\)