首页 > 其他分享 >计数杂题

计数杂题

时间:2023-07-10 18:57:51浏览次数:35  
标签:连通 frac limits sum 计数 cdots 杂题 我们

搞一点计数题放在这,看到有意思的计数就更(虽然在组合数学那已经更了好多了)。

[CTSC2017] 吉夫特

给定一个长度为 \(n\) 的序列 \(a\),保证 \(a_i\) 互不相同。求出有多少个长度大于等于二的序列满足

\[\prod _{i=2}^{k} \binom{a_{b_{i-1}}}{a_{b_i}} \bmod 2 = \binom{a_{b_1}}{a_{b_2}} \times \binom{a_{b_2}}{a_{b_3}} \times \cdots \binom{a_{b_{k-1}}}{a_{b_k}} \bmod 2 > 0 \]

方案数对 \(10^9+7\) 取模。

数据范围:\(n\le 211985, a_i\le 233333\)。


我们考虑这个序列的性质,即这些组合数中不能出现偶数。我们考虑如何利用这个性质。

我们把组合数的计算公式搬出来:\(\dbinom{n}{m}=\frac{n!}{m!(n-m)!}\),为了让它为奇数,我们需要让上下阶乘的 \(2\) 的个数相等。

我们考虑把阶乘分解,设 \(f(x)\) 为 \(x!\) 所含的 \(2\) 的个数,则易得:

\[f(x)=\sum_{i=1}^{+\infty} \frac{x}{2^i} \]

我们再设 \(g(x)=x\),\(h(x)\) 为 \(x\) 二进制中 \(1\) 的个数,则

\[\begin{aligned} g(x)&=g(\frac{x}{2})+\frac{x}{2}+(x\bmod 2)\\ &=\sum _{i=1}^{+\infty} \frac{x}{2^i}+h(x) \\ &=f(x)+h(x) \end{aligned} \]

则 \(f(x)=g(x)-h(x)=x-h(x)\)。再根据需要让上下阶乘 \(2\) 的个数相等,能得出来 \(h(n)=h(m)+h(n-m)\),即 \(n\) 二进制下 \(1\) 的个数等于 \(m\) 二进制下 \(1\) 的个数加 \(n-m\) 二进制下 \(1\) 的个数。我们考虑如何满足这个条件。

考虑 \(n=(\cdots 00100\cdots)_2, m=(\cdots 00010\cdots)_2\),那么 \(n-m=(\cdots 00010\cdots)_2\)。显然不可能 \(1\) 的个数相等,因此我们必须满足 \(m\) 是 \(n\) 的子集。

这样就好做了。我们先把所有数存一下位置,从后往前扫,枚举 \(a_i\) 的子集,看是否在 \(i\) 后面,转移即可。

时间复杂度:\(O(\mathrm{能过} )\)。

[HNOI2012] 集合选数

给定一个集合 \(\{1, 2, 3\cdots n \}\),问有多少满足下述限制的子集:如果 \(x\) 在该集合中,那么 \(2x, 3x\) 不能在该集合中。

数据范围:\(n\le 10^5\)。


很有意思的一道题。

我们考虑从一个数为左上角开始构造出一个矩阵,这个矩阵每个数都是它左边数的 \(2\) 倍,是它上面的数的 \(3\) 倍。比如以 \(1\) 为例,构建出的矩阵即为:

\[\begin{bmatrix} 1& 2& 4& 8& \cdots&\\ 3& 6& 12& 24& \cdots&\\ 9& 18& 36& \cdots &\cdots&\\ 27& \cdots& \cdots& \cdots& \cdots&\\ \cdots &\cdots &\cdots &\cdots &\cdots \end{bmatrix} \]

这样,我们就把问题转化为了:在这个矩阵中选择数字,满足选择的数字不相邻。同时我们发现,每个矩阵的方案互不干扰。我们就可以每个矩阵求一遍。

不难看出,这个矩阵的大小最多为 \(\log_2 n\times \log_3 n\)。我们可以直接状压 dp,是一个比较经典的状压 dp 问题。可以直接用插头 dp 解决。

时间复杂度:\(O(\mathrm{能过})\)。

城市规划

求 \(n\) 个点有标号连通图的个数。

数据范围:\(n\le 130000\)。


本题可能不是那么精妙,但是是下一道题的前置。

我们设 \(c_i\) 为 \(i\) 个点有标号连通图个数,\(\varphi(i)\) 为 \(i\) 个点的图的个数,易知 \(\varphi(x)=2^{\frac{x(x-1)}{2} }\),只需要看点与点之间的边是否在图中即可。

我们考虑容斥,求出不连通图的个数。我们可以枚举一号点所在连通块的大小,就能得到转移方程

\[c(n)=\varphi(n)-\sum \limits _{i=1}^{n-1}\dbinom{n-1}{i-1}c_i\varphi(n-i) \]

这个转移方程右半部分的含义是:\(1\) 号点所在连通块的方案数为 \(c_i\),同时我们需要选出 \(i-1\) 个点和它在一个连通块中。剩下的点就不用管了,形成任意的图都可以。

考虑加速计算这个式子:

\[\begin{aligned} c_n&=\varphi(n)-\sum \limits _{i = 1}^{n-1}\frac{(n-1)!}{(i-1)!(n-i)!}c_i\varphi(n-i)\\ \frac{c_n}{(n-1)!} &=\frac{\varphi(n)}{(n-1)!}- \sum \limits _{i = 1}^{n-1}\frac{c_i}{(i-1)!}\frac{\varphi(n-i)}{(n-i)!} \end{aligned} \]

设 \(\phi (x)=\frac{c(x)}{(x-1)!}\),\(\pi (x)=\frac{g(x)}{x!}\)。那么上面的式子就变为了

\[\phi(n)=\frac{g(n)}{n!}-\sum \limits_{i=1}^{n-1}\phi (i)\pi(n-i) \]

直接分治 FFT 即可。时间复杂度 \(O(n\log^2 n)\)。

How Many of Them

求有 \(n\) 个点,割边数量不超过 \(m\) 的无向连通图的数量。

数据范围:\(n, m\le 50\)。


比较 nb 的不用多项式的图论计数。

我们设 \(F[i, j]\) 为 \(i\) 个点,\(j\) 条割边的无向连通图的数量。我们考虑去掉 \(1\) 号点所在的双连通分量,那么整张图就会分为一堆连通块。我们再设 \(G[i, j, k]\) 为 \(i\) 个点,\(j\) 条割边,\(k\) 个连通块的无向图的数量。那么我们枚举 \(1\) 号点所在连通分量的大小,就能对于 \(0<j<i\) 得到转移方程:

\[F[i, j]=\sum \limits _{p=1}^{i-1}(F[p, 0]\times\dbinom{i-1}{p-1}\times \sum \limits _{q=1}^j (G[i-p,j-q,q]\times p^q)) \]

\(p\) 枚举的是 \(1\) 号点所在连通分量的大小,\(q\) 枚举的是 \(1\) 号点所在的连通分量去掉后会剩下多少连通块,而割边也会随之减少 \(q\),可以看下图理解:

由于边双的性质,最后一定会形成一棵树

然后 \(p^q\) 的含义即为我们每个连通分量一定会选择 \(1\) 号点所在的连通块中一个点连边,那么方案数即为 \(p^q\)。

再考虑求出 \(F[i, 0]\)。根据容斥,我们只需要用连通图的数量减去含割边的图的数量即可,而连通图的数量则看上一道题。因此:

\[F[i, 0]=c_i-\sum \limits _{j=1}^{i-1}F[i,j] \]

最后我们再考虑求出 \(G\) 数组。我们依旧枚举 \(1\) 号点所在连通块大小 \(p\),同时我们再枚举一号点连通块割边的数量 \(q\),我们就能得到转移方程:

\[G[i,j,k]=\sum\limits_{p=1}^i\sum\limits _{q=0}^j(f[p,q]\times p\times \dbinom{i-1}{p-1}\times G[i-p,j-q,k-1]) \]

我们注意到其中多乘了一个 \(p\),这其实代表着我们求出的是“有根双连通分量”,因为我们要在这个双连通分量中选一个点来和一开始去掉的边双连边。因此我们多乘了一个 \(p\),而在别的情景中需要视情况而定。

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

未完待续,持续更新

标签:连通,frac,limits,sum,计数,cdots,杂题,我们
From: https://www.cnblogs.com/crimsonawa/p/17542013.html

相关文章

  • 【计数,DP】ABC306Ex Balance Scale
    ProblemLink现在有\(n\)个球,每个球有一个重量,重量未知。接下来会进行\(m\)次称重,每次给定\(a_i\)和\(b_i\),比较这两个球的重量,结果可能是\(>,=,<\)中的一种。求在所有\(3^m\)个结果中有几种是可能出现的。\(n\le17,m\len(n-1)/2\)。技巧:怎样配容斥系数将\((a_......
  • 按单元格填充颜色或字体颜色统计数据的自定义函数
    参考网络代码,自己写了二个通用的自定义函数,用于统计不同颜色的单元格数值或个数。1FunctionSumColor(rngAsRange,cellColorAsRange,NAsByte)AsDouble23'输入=SumColor(A1:A10,A1,0),其中A1:A10是统计的范围,A1是统计的颜色所在的单元格,0表示按照背景......
  • sat计数问题
    /*先是建图,跑一次缩点建立一个最初的阵营加上0代表认识,1代表不认识ans=0因为划分了两个独立的阵营,所以一次是只能交换一个人的如果对方阵营我只认识一个,并且我认识的哪一个可以来到我的阵营,那么就将两者进行交换(0,1)如果对方阵营的我都不敌对,或不认识,那我就可以直接过......
  • 2023.7.5 杂题
    CF1174FEhabandtheBigFinale树链剖分。先s1求出\(x\)所在子树\(y\)。若\(y\)为\(1\)轻儿子,递归求解\(y\)。若\(y\)为重儿子,那么找到重链上与\(x\)深度相同的节点\(c\).调用dc,此时\(c\)向上跳\(x\)与\(c\)距离的一半便是\(lca\),递归求解。相当......
  • 不知道几百年前写的计数 dp 博客
    远古抽象博客计数是真的菜/kk,特地总结了一下这几天做的计数\(dp\).CF1606E设\(f_{i,j}\)表示当场上还有\(i\)个英雄,血量最大值为\(j\)且最后无人存活的方案数。当再进行一轮所有英雄都要寄时:\(f_{i,j}=j^i-(j-1)^i\)\(j^i\)为所有血量的选择方案,\((j......
  • 计数排序
    计数排序是一种非比较的排序算法,它的时间复杂度是O(n+k),其中n是待排序数组的长度,k是数组中的最大值。计数排序的基本思想是,对于每个输入元素x,确定小于等于x的元素个数,然后把x放在输出数组中对应的位置上。为了实现这个过程,需要一个额外的数组C,用来存储每个元素出现的次数,以及一个......
  • 【杂题乱写】6 月多校分治专题训练
    AGym-101471DMoneyfornothing就是求\((d_j-c_i)(q_j-p_i)\)的最大值。可以看作点对\((d_j,q_j)\)与\((c_i,p_i)\)在二维平面上构成矩形的最大值,且\(c_i\ged_j,p_i\geq_j\)。把卖家点对放在序列\(a\),买家点对放在序列\(b\),先删去一定不优的点,删完之后\(a,b\)都......
  • 【杂题乱写】6 月多校分治专题训练
    AGym-101471DMoneyfornothing就是求\((d_j-c_i)(q_j-p_i)\)的最大值。可以看作点对\((d_j,q_j)\)与\((c_i,p_i)\)在二维平面上构成矩形的最大值,且\(c_i\ged_j,p_i\geq_j\)。把卖家点对放在序列\(a\),买家点对放在序列\(b\),先删去一定不优的点,删完之后\(a,b\)都......
  • 【杂题乱写】6 月多校分治专题训练
    AGym-101471DMoneyfornothing就是求\((d_j-c_i)(q_j-p_i)\)的最大值。可以看作点对\((d_j,q_j)\)与\((c_i,p_i)\)在二维平面上构成矩形的最大值,且\(c_i\ged_j,p_i\geq_j\)。把卖家点对放在序列\(a\),买家点对放在序列\(b\),先删去一定不优的点,删完之后\(a,b\)都......
  • 7月CF杂题
    怎么七月了?六月的只写了一道题捏。EducationalCodeforcesRound151(RatedforDiv.2)俺寻思能行。D.RatingSystem为什么大家都切那么快捏。显然\(k\)一定是\(a\)数组的一个前缀和。假设\(k=\sum\limits_{i=1}^xa_i\),剩下的等价于处理初值为0且\(k=0\)的子问......