随笔分类 - 算法-数学-组合计数/生成函数/容斥原理
摘要:用总数减去不合法的排列数。考虑不合法的排列里的极长不合法段,那么不合法的排列可以分为两类:有两个极长不合法段的,或者有三个及以上极长不合法段的。对于前者,发现至少有一个不合法段是前缀或后缀,且数值为 1...k,可以递推求出其方案数(二次容斥)。对于后者,不合法段一定不相交。考虑用 DP 对齐进行划分,再用前面处理好的答案算出其排列方案数。
阅读全文
摘要:初步转化:不管死了多少个猎人,我们开枪时仍然在 n 个猎人里进行选择,如果选到了已经死去的猎人,就假装无事发生,再选一次,直到某次选中了活着的猎人为止。之后使用容斥,考虑哪些人死的时间晚于 1,写出式子后,发现可以用分治 NTT 计算。
阅读全文
摘要:使用容斥原理解本题需要大量的分类讨论,故我们转而考虑不重不漏地计数。将约数按它在 A,B,C 哪几个里出现过,分为 7 类。枚举三元组里每个数的种类,则选择的方案数可以用一个组合数公式计算出来
阅读全文
摘要:本文主要介绍了卡特兰数的定义,几种常见形式,和它对应的实际意义。利用其实际意义,可以解决一类 DP 问题(NOI2018 冒泡排序)。此外,卡特兰数在生成函数的推导中也有应用,但不是本文探讨的重点
阅读全文
摘要:可以将 a 序列排序。枚举 p,q 上每个位置 i 对答案的贡献。枚举 p,q 上第 i 位的元素分别为 aj, ak。根据 j,k 的大小关系分类讨论一下,用组合数算出方案数,时间复杂度 O(n^3)。单独枚举 j 和 k,分别计算贡献(正的或负的,需要分类讨论一下),即可做到 O(n^2)。然后拿着 O(n^2) 的式子,把它化成卷积的形式,就能得到 O(n log n) 做法,可以通过本题。
阅读全文
摘要:题目来源:Codeforces,#678,Codeforces Round #678 (Div. 2),CF1436;CF1436E Complicated Computations,CF1436F Sum Over Subsets。 CF1436E Complicated Computations
阅读全文
摘要:拆方差。拆成三个部分,前两个部分是类似的。我们改变枚举方式,用桶存储出现次数,并做 NTT,就能求出。第三部分,基于前面 NTT 的结果,进行容斥。分类讨论一下,即可求出。
阅读全文
摘要:发现所有序列,都能被整合为一个特定的形式,这样就解决了本质不同的问题。然后对这种特定形式计数,用到插板法。简单推一推组合数的式子。
阅读全文
摘要:把覆盖,转化成插入,由此可以得到一个O(n^2)的DP。观察DP转移,发现答案是一堆短多项式的乘积。一般做法是分治FFT,不过本题里可以用倍增+二项式定理去掉一个log。
阅读全文
摘要:考虑每个gcd对答案的贡献。这不好求。可以先求gcd至少是d时对答案的贡献(也就是gcd是d的倍数),然后再容斥回去。多次询问时,考虑预处理答案,从n-1向n递推,则只有d是n的约数会有变化,这样的d总量是O(n log n)的。但我们不能每次重新做一遍容斥。可以把容斥转化为给每个d一个贡献系数,这样d的贡献值变化时,只要拿变化量乘以系数即可。
阅读全文
摘要:把序列变成一棵基环树。转化为求所有基环树环的数量之和。可以egf做。设g(n)表示n个节点的基环树森林数量,显然g(n)=n^n。设G(x)是g的egf。则n个节点的一棵基环树的数量就是F=ln G。环的总数,就等于F*G,相当于枚举某一棵基环树对答案的贡献,其他部分任意。时间复杂度n log n。k=2时,还要加上叶子数的期望,单独考虑每个节点的贡献即可。
阅读全文
摘要:相邻的一奇一偶(2i+1, 2i+2)不可能全都选。对于每一组这样相邻的一奇一偶,考虑选奇数、选偶数、都不选这三种情况,分别称为A,B,C。则问题相当于要求有多少长度为m的ABC串,其中有a个A,b个B,m-a-b个C,且不出现BA这个子串。先考虑BC,方案数是C(m-a,b)。再考虑插入A,方案数是C(m-b,a),所以总方案数是C(m-a,b)*C(m-b,a)
阅读全文
摘要:把f(k)拆开,对每一项单独算。后面的可以用二项式定理,难点在如何消掉k^i。可以每次求导再乘以x,效果等价于让每一项乘以k。这样就把k^i消掉了。还有一种方法是利用组合恒等式,拿组合数去消k,发现系数恰好是第二类斯特林数。当然,还有很多别的方法,例如考虑组合意义
阅读全文
摘要:先求严格上升的这些序列的权值之和,再乘以n!就是答案了。DP。设f[i]表示所有长度为i的,严格上升的序列,的权值和。考虑在f[i-1]后面加一个数,转移到f[i],那么要求新加入的数不能和前面任意一个数相同,且必须是最大的。先不管是不是最大的,最后再除以i就行。不能相同这个条件可以容斥。最后发现需要预处理自然数幂的和,用求逆,把NTT换成暴力乘就行。
阅读全文
该文被密码保护。
该文被密码保护。
摘要:条件相当于求不能走原图里的边的方案数。把它容斥成,求必须走至少i条原图里边的方案数。先做状压DP,求出把原图,划分为x条链的方案数。链之间是完全图,完全图的哈密尔顿路径数量是x!,要乘上容斥系数,取决于不合法的边数。因为有n个图,相当于做n次背包,也就是自己卷自己的卷积。我们转成点值,然后快速幂,最后IDFT回去即可。
阅读全文
摘要:用二项式反演(容斥),推出组合式。式子的瓶颈在于枚举B神每门课的得分。把这部分单独拿出来,推成自然数幂求和的形式。然后用拉格朗日反演求解。
阅读全文