【小题狂练π】特别篇 · 集训“在这老街回眸 烟雨中追溯我是谁”

AT_arc147_d [ARC147D] Sets Scores

我草我要哭了,这题我不会/ll/ll/ll。容斥了一辈子被诈骗了/ll/ll。

我们考虑我们现在假设一个 \(x=\{x_i\}\) 表示 \(S_i\)\(S_{i+1}\) 之间差的数,显然如果我们知道 \(S_1\)\(x\) 显然我们是可以推出来 \(S\) 的。我们考虑枚举数字 \(i\) 是否在集合中,设在集合中的出现次数为 \(a_i\),不在集合中的出现次数为 \(b_i\),这个显然是互斥的,相加等于 \(n\)

我们选择第一个集合的方案数也就是 \(\prod_{i=1}^{m}(a_i+b_i)=n^m\),然后我们乘上对应的 \(x\) 序列的方案数也就是 \(m^{n-1}\)

答案就是 \(n^mm^{n-1}\),邪恶。

AT_abc297_e [ABC297E] Kth Takoyaki Set

呃呃你怎么进来的,我们考虑用一个小根堆暴力做,复杂度 \(O(nm)\)

P4351 [CERC2015] Frightful Formula

我们对于每个数去考虑其贡献,对于一个初始位置为 \(a_{i,1}\) 的数,先不考虑这个 \(c\),其目标节点是 \(a_{n,n}\),其到达 \(a_{n,n}\) 一条路径的贡献是 \(a^{n-1}b^{n-i}\)。路径的个数是 \(\binom{2n-i-2}{n-2}\) 条。我们可以很容易的拿到左边界点和上边界点在不考虑 \(c\) 的情况下对于答案的贡献,如果我们现在考虑这个 \(c\) 该怎么办呢?

容易想到, \(c\) 的贡献是 \(\sum_{i=1}^{n}\sum_{j=1}^{n}\binom{2n-i-j}{n-i}a^{n-j}b^{n-i}c\),这个显然是 \(O(n^2)\) 的。我们考虑怎么办。

改变一下枚举顺序,我们设 \(k=2n-i-j\),上面那个就等同于 \(c\sum_{k=0}^{2n-4} \sum_{i=\max(0,k-n+2)} ^ {\min(k,n-2)} \binom{k}{i}b^ia^{k-i}\)。我们考虑把这个式子拆成两个部分,一部分是 \(c \sum_{k=0}^{n-2}\sum_{i=0}^{k}\binom{k}{i}b^ia^{k-i}=c\sum_{k=0}^{n-2} (a+b)^k\),第二部分是 \(c\sum_{k=n-1}^{2n-4}\sum_{i=k-(n-2)}^{n-2}\binom{k}{i}b^ia^{k-i}=c \sum_{k=n-1}^{2n-4}f_k\)(我们让 \(f_k\) 表示 \(\sum_{i=k-(n-2)}^{n-2}\binom{k}{i}b^ia^{k-i}\)

可以得到 \(f_k = (a+b)f_{k-1} - \binom{k-1}{k-n-1}a^{n-1}b^{k-n-1} - \binom{k-1}{n-2}a^{k-n-1}b^{n-1}\),这里可以 \(O(n )\) 递推。

P5400 [CTS2019] 随机立方体

我们考虑容斥,设 \(f_i\) 表示有至少 \(i\) 个极大数的情况。\(b_i\) 表示选出 \(i\) 个三维坐标都不相同的数的方案数,\(g_i\) 表示和 \(i\) 个极大数至少有一维坐标相同的点的个数,\(h_i\) 表示把这 \(g_i\) 个数分配给 \(g_i\) 个点合法的方案数。

我们考虑怎么去求这个 \(f_i\),容易想到 \(f_i = \binom{nml}{g_i}b_ih_i(nml-g_i)\)。对于 \(b_i\),假设我们已经钦定了一个点 \((x_0,y_0,z_0)\) 是极大的,那么这个时候直线 \(x=x_0\)\(y=y_0\)\(z=z_0\) 的三条直线上的点都不能再作为极大点。此时,立方体也就变成了 \((n-1)(m-1)(l-1)\),所以可以想到 \(b_i=\frac{1}{i!}\prod_{j=0}^{i-1}(n-j)(m-j)(l-j)\)

然后我们考虑算一下 \(g_i\),显然是 \(nml-(n-i)(m-i)(l-i)\)。然后对于 \(h_i\),设需要比 \(i\) 个极大点小的点组成的集合为 \(S_i\),然后 \(a_i\) 表示第 \(i\) 个极大点上的数字。我们从小到大的考虑这 \(i\) 个点,我们考虑新加入一个点对答案的影响,我们因为从小到大所以新加入的点一定比前面的 \(i-1\) 个点都要大,\(R\) 表示对于 \(S_i\)\(S_{i-1}\) 的并集不交的部分的大小。我们有 \(h_i=h_{i-1}(\text{size}(\cup_{j=1}^{i-1}S_j)+1)^{\overline R}\),我们其实知道这个中间的是 \(g_i\),所以稍微带入一下,\(h_i=h_{i-1}(g_{i-1}+1)^{\overline {g_i-g_{i-1}-1} }=h_{i-1}\frac{(g_i-1)!}{g_{i-1}}=\prod_{j=1}^{i}\frac{(g_{j}-1)!}{g_{j-1}}\)

我们考虑把这个带入进去,\(f_i=\binom{nml}{g_i}b_ii!\prod_{j=1}^{i}\frac{(g_j-1)!}{g_{j-1}!}(N-g_i) = n!m!l!i!\prod_{j=1}^{i}\frac{(g_j-1)!}{g_j!}=n!m!l!i!\prod_{j=1}^{i}\frac{1}{g_i}=\frac{n!m!l!i!}{\prod_{j=1}^{i}\frac{1}{g_i}}\)

P5591 小猪佩奇学数学

对于这个

\[\sum_{i=0}^n \binom n i \times p^{i} \times \left\lfloor \frac{i}{k} \right\rfloor \bmod 998244353 \]

我们把 \(\sum_{i=0}^n \binom n i \times p^{i} \times \left\lfloor \frac{i}{k}\right\rfloor\),我们想到二项式定理,但是这个很不优啊,我们考虑先把后面这个去掉是一个二项式定理的形式,考虑如果我们把这个 \(k\) 锁成 \(1\) 怎么做。那就是形如 \(\sum_{i=0}^n \binom n i p^{i} i\) 状物。我们知道一个引理:\(\binom{n}{m}m=\binom{n-1}{m-1}n\)

所以 \(\sum_{i=0}^n \binom n i p^{i} i=np\sum_{i=0}^n \binom {n-1}{i-1} p^{i-1}=np(p+1)^{n-1}\)。然后我们考虑拓展到一般情况,我们知道 \(\left\lfloor \frac{i}{k} \right\rfloor=\left(\sum_{j=0}^{i}[k|j]\right)-1\),我们又知道对于这个 \([k|n]=\frac{1}{k}\sum\limits_{d=0}^{k-1}\omega^{dn}_{k}\)

我们把这个带回到最开始的式子里头,\(\sum_\limits{i=0}^{n}\binom{n}{i}p^i\lfloor\frac{n}{i}\rfloor=\sum_\limits{i=0}^{n}\binom{n}{i}p^i\left(\left(\sum\limits_{j=0}^{i}\frac{1}{k}\sum\limits_{d=0}^{k-1}\omega_{k}^{dn}\right)-1\right)\)

\[\begin{aligned} \sum_\limits{i=0}^{n}\binom{n}{i}p^i\left(\left(\sum\limits_{j=0}^{i}\frac{1}{k}\sum\limits_{d=0}^{k-1}\omega_{k}^{dn}\right)-1\right) &= \sum_\limits{i=0}^{n}\binom{n}{i}p^i\left(\sum\limits_{j=0}^{i}\frac{1}{k}\sum\limits_{d=0}^{k-1}\omega_{k}^{dn}\right)-\sum_\limits{i=0}^{n}\binom{n}{i}p^i\\ &= \frac{1}{k}\sum\limits_{d=0}^{k-1}\sum_\limits{i=0}^{n}\binom{n}{i}p^i\sum\limits_{j=0}^{i}\omega_{k}^{dn} - (p+1)^n \\ &= \frac{1}{k}\sum\limits_{d=0}^{k-1}\sum_\limits{i=0}^{n}\binom{n}{i}p^i\frac{\omega_k^{d(i+1)}-1}{\omega_{k}^{d}-1}-(p+1)^n \\ &= \frac{1}{k}\sum\limits_{d=0}^{k-1}\frac{\omega_k\sum_{i=0}^{n}\binom{n}{i}p^i\omega_{k}^{di}-(p+1)^n}{\omega_{k}^{d}-1} -(p+1)^n \\ &= \frac{1}{k}\sum\limits_{d=0}^{k-1}\frac{\omega_k(p\omega_k^d+1)^n-(p+1)^n}{\omega_{k}^{d}-1}-(p+1)^n \end{aligned} \]

其中 \(\omega_k=g^{\frac{mod-1}{k}}\)。但是我们发现对于 \(d=0\) 的情况很坏啊,这个下面怎么除以 \(0\) 了。考虑特判。

AT_arc110_f [ARC110F] Esoswap

题目大意就是给你一个数列 \(P\),一次操作中,我们会把 \(P_i\)\(P_{i+P_i\bmod p}\) 交换,你需要用若干次操作将数列 \(P\) 排序。

开题没思路,考虑我们最多进行 \(2\times 10^5\) 次操作,和 \(100\) 比了一下发现是一个接近 \(n^2 \log n^2\) 级别的数,首先我们肯定是知道目标是长什么样子的吧,观察样例我们发现每一步都从大到小被还原到原本的目标位置,虽然怀疑样例会被动手脚,但是我们起码是可以试图让每一个没有被还原的从大到小先被还原的!

我们似乎不太可能知道怎么才能直接让这个还原,直接暴力搜又是 \(n^n\) 级别的似乎,但是我们考虑这个是一个排列啊,我们无论怎么操作都不会取到一个已经取过的值,到最后一定会变成 \(0\)。我们考虑从大到小跑若干次,无论原本是什么状的物品,在我们跑了若干次之后都必然变成 \(0\),然后在上一位开始去取,我们一定会用一个 \(p_i=1\) 换出来下一位的 \(0\),然后再重复以上,我们一定会用 \(p_i=2\) 换掉这个 \(1\),然后在用 \(1\) 换掉 \(0\),我们一直这样进行下去,最后一定会变成升序的数列。

从大到小每个都输出 \(n\) 次即可。

P13783 [eJOI 2022] Bounded Spanning Tree

我们先考虑 \(m=n-1\) 的情况,很简单,我们考虑枚举 \(i\in[1,n]\),我们在所有左端点小于等于 \(i\) 的中找右端点最小的。考虑如果有非树边的情况我们怎么做,我们考虑先对前 \(n-1\) 条边建树,然后我们考虑一条边在什么情况下是更优的,参考次小生成树或者水管局长,如果在加入这条边形成的环里头有比这个边要大的边就可以把那个去掉换成这条边,我们假设一条树边为 \(i\),一条非树边为 \(j\),你考虑这个树边显然是不能比 \(\max \{l_i,l_j\}\) 小的,又不能比 \(\min\{r_i,r_j\}\) 大。我们现在需要实现的就是找到一整条链的 \(\max\{l_i\}\)\(\min\{r_i\}\),这个随便维护了吧。

P3713 [BJOI2017] 机动训练

容易想到有 \(k\) 种不同的路径,假设每条路径的出现次数为 \(a_i\),那么我们的答案也就是 \(\sum\limits_{i=1}^{k} a_i^2\)

暴力去计算显然是无法实现的,我们尝试去解释这个 \(a_i^2\),把这个当做一个 \(a_i\times a_i\) 的形式。一个人走一次出现的次数是 \(a_i\) 的,所以我们想到把这个刻画为两个人分别走,走出的地形相同的方案数。

我们考虑设 \(dp_{x_1,y_1,x_2,y_2}\) 表示两条路径起点为 \((x_1,y_1)\)\((x_2,y_2)\) 的机动路径相同的方案数,然后暴力做即可。

CF1295F Good Contest

\(a_i\) 是一个在 \([l_i,r_i]\) 上随机分配的整数,求 \(a_{i\cdots n}\) 单调不降的概率。对 \(998244353\) 取模.
\(2\le n\le 50\)\(0\le l_i \le r_I \le 998244351\).

\(\mathbb{S}\text{olution}\)

概率不会求,所以转化为求方案数,然后就是神秘计数。设 \(dp_{i,k}\) 表示选了 \(i\) 个数且 \(a_i = k\) 的情况。

容易想到一个转移方程 \(dp_{i,k} = \sum_{j \le k} dp_{i,j}\),当然这样是显然过不去的,考虑 \(n\) 很小 \(l,r\) 很大,于是想到离散化。我们根据 \(l_i,r_i\) 离散化成 \(Θ(n)\) 个值域区间 \([d_i,d_{i+1})\)。我们改变 \(dp_{i,j}\) 表示选了 \(i\) 个数且 \(a_i \in [d_i,d_{i+1})\) 的方案数,我们考虑虽然我们已经选中了一个区间,此时 \(a_{i-1}\)\(a_i\) 在同一个区间里,但是仍然可能 \(a_i<a_{i-1}\)。我们考虑枚举第 \(j\) 个区间放了 \(k\) 个,有 \(i-k\) 个单调不增的方案数是 \(\binom{b_{j+1}-b_j+i-k-1}{i-k}\),转移方程为 \(dp_{i,j} = \sum_{k}^i\left(\binom{b_{j+1}-b_{j}+i-k-1}{i-k}\sum\limits_{d=j+1}^jdp_{k,d}\right)\)

P3643 [APIO2016] 划艇

\(a_i\) 是一个在 \([l_i,r_i]\) 上随机分配的整数,也可以不选,求 \(a_{i\cdots n}\) 单调不降的方案数。对 \(10^9+9\) 取模.
\(2\le n\le 500\)\(0\le l_i \le r_I \le 998244351\).

\(\mathbb{S}\text{olution}\)

和上一道题本质相同,唯一区别就是可以不选。我们考虑先写出朴素的 dp:设 \(dp_{i,j}\) 表示选了 \(i\) 个数且 \(a_i=j\) 的方案数,可以写出朴素转移方程 \(dp_{i,j} = \sum_{t<i}\sum_{k\le j} dp_{t,k}\),然后考虑离散化,分成 \(Θ(n)\) 个形如 \([d_i,d_{i+1})\) 的值域区间。考虑枚举第 \(j\) 个区间放了 \(k\) 个数,有 \(i-k\) 个单调不降的方案数。显然我们可以得出 \(dp_{i,j} = \sum_{k=0}^{i-1}\left(\binom{b_{j+1}-b_j+i-k-1}{i-k}\sum_{d=j+1}^{j-1}dp_{k,d}\right)\),然后 \(ans=\sum_{i}\sum_{j}dp_{i,j}\)

AT_arc104_e [ARC104E] Random LIS

对于一个 \(n\)\(X_i\),每个 \(X_i\) 等概率从 \([1,a_i]\) 随机选取,求严格 \(\text{LIS}\) 的期望长度.

\(n\le 6,1 \le a_i \le 10^9\).

\(\mathbb{S}\text{olution}\)

我们考虑把最长严格递增子序列长度的期望值转化为长度之和除以方案数,然后直接大力计数。下面的部分显然是和上面的那些本质相同的!现在的主要问题就是如何统计 LIS 长度之和。

AT_arc105_f [ARC105F] Lights Out on Connected Graph

给一个 \(n\) 个点 \(m\) 条边的无向图,问有多少导出子图是连通二分图,对 \(998244353\) 取模.

\(1 \le n\le 17\).

\(\mathbb{S}\text{olution}\)

我们考虑钦定一些点 \(\in S_1\) 另一些 \(\in S_2\),也就是设 \(\text {cnt}_u\) 表示点集 \(u\) 内的边数,方案数 \(g(S)\)\(2^{\text{cnt}_S-\text{cnt}_{S_1}-\text{cnt}_{S_2}}\)。我们发现这样是会重复计算的,设图中有 \(k\) 个联通块(包括孤立点),这个方案就被重复计算了 \(2^k\) 次。

我们考虑枚举第一个联通块 \(T\),只要让 \(T\) 与剩下的点不联通我们就可以减掉这些方案,设 \(T\) 中包含 \(S\) 中标号最小的点,连通子集 \(S\) 的对应方案数为 \(f(S)\),可以得出 \(f(S)=g(S)-\sum_{T\subset S}f(T)g(S/T)\)

因为黑白染色可以翻转,所以最后答案要除以 \(2\)

AT_abc273_g [ABC273G] Row Column Sums 2

求满足第 \(i\) 行元素之和等于 \(R_{i}\),第 \(i\) 列元素之和等于 \(C_{i}\)\(n\times n\) 矩阵的方案数。答案对 \(998244353\) 取模。

\(1\le n\le 5000\), \(R_i,C_i\in\{0,1,2\}\).

\(\mathbb{S}\text{olution}\)

我们考虑一个暴力的 dp,设 \(dp_{i,j,k,l}\) 表示目前已经填了 \(i\) 行,有 \(j\) 行什么都不能填,\(k\) 行可以填 \(1\) 个,\(l\) 行可以填两个 \(1\) 或者一个 \(2\) 的方案数。复杂度显然是 \(O(n^4)\) 的,考虑优化。

我们实际上是不需要 \(j\) 的,因为不能填数的对答案显然产生不了什么影响。这样是 \(O(n^3)\) 的,然后我们发现对于 \(k\)\(l\) 只需要保留其中一个即可。这个是因为假设我们之前已经填了 \(T_i\) 的值,并且总和为 \(S\),那么 \(2l+k=S-T_i\)。只要知道一个就可以直接算出另一个。

那么我们定义 \(dp_{i,j}\) 表示填到前 \(i\) 行,剩余 \(j\) 列可以填一个 \(1\) 的方案数。考虑转移,对于 \(r_i=0\) 这一行什么都不能填,转移是直接的 \(dp_{i,j} \gets dp_{i-1,j}\)

对于 \(r_i=1\) 的情况,这一行可以填一个 \(1\),考虑分类讨论填在哪个位置。对于填在 \(c_i = 1\),减少了一个可以填 \(1\) 的列,这个是显然的 \(dp_{i,j-1} \gets dp_{i-1,j}\times j\)。对于填在 \(c_i = 2\),相当于增加了一个可以填 \(1\) 的列,所以 \(dp_{i,j+1}\gets dp_{i-1,j}\left(\frac{1}{2}(S-T_i-l)\right)\),后面这个是可以填 \(2\) 的列的个数。

对于 \(r_i=2\) 的情况,依然考虑分类讨论,如果填在两个 \(c_i=1\),那么相当于减少了两个可以填 \(1\) 的列,所以 \(dp_{i,j-2}=dp_{i-1,j}\binom{j}{2}\)。如果填在一个 \(c_i=1\) 一个 \(c_i=2\),那么相当于没减少可以填 \(1\) 的列,转移就是 \(dp_{i,j}=dp_{i-1,j}\left(\frac{1}{2}(S-T_i-l)\right)j\),如果填在一个 \(c_i=2\) 里,那么也相当于没变,转移是 \(dp_{i,j}=dp_{i-1,j}\left(\frac{1}{2}(S-T_i-l)\right)\)。如果填在两个 \(c_i=2\) 中,那么相当于多出来两个 \(c_i=1\),转移是 \(dp_{i,j+2}=dp_{i-1,j}\binom{\frac{1}{2}(S-T-l)}{2}\)

复杂度 \(O(n^2)\)

P2051 [AHOI2009] 中国象棋

一个 \(n\times m\) 的矩阵,\(a_{i,j}=0/1\),每行的和与每列的和均不超过 \(2\),求填数方案数。对 \(9999973\) 取模。

\(n,m\le 100\).

\(\mathbb{S}\text{olution}\)

我们考虑一个 \(dp_{i,j,k}\) 表示填了 \(i\) 行,剩下 \(j\) 行为 \(1\)\(k\) 行为 \(2\) 的方案数。然后就是和上一题一样的分讨,不填 \(dp_{i,j,k}\gets dp_{i-1,j,k}\),填一个炮,分两种情况一种 \(dp_{i,j,k}\gets dp_{i-1,j+1,k}(j+1)\),一种 \(dp_{i,j,k}=dp_{i-1,j-1,k+1}(k+1)\)。填两个炮分四种情况讨论,\(dp_{i,j,k}\gets dp_{i-1,j+2,k}\binom{j+2}{2}\)\(dp_{i,j,k}\gets dp_{i-1,j,k+1}(k+1)\)\(dp_{i,j,k}\gets dp_{i-1,j-1,k+1}(k+1)(j-1)\)\(dp_{i,j,k}\gets dp_{i-1,j-2,k+2}\binom{k+2}{2}\)

AT_abc266_g [ABC266G] Yet Another RGB Sequence

给你 \(R\) 个 R,\(G\) 个 G,\(B\) 个 B 组成一个字符串,求有 \(k\) 个连续 RG 的方案数

\(1\le R,G,B,K \le 10^6\)

\(\mathbb{S}\text{olution}\)

我们考虑先排 \(k\) 个 RG,然后排其他的,变成排不能有连续 RG,做完了。你为啥有蓝啊。

P6475 [NOI Online #2 入门组] 建设城市

题面太长不写了。

\(\mathbb{S}\text{olution}\)

首先我们考虑我们知道在区间 \((l,r)\) 中排出一个长度为 \(n\) 的不升/不降序列方案数是 \(\binom{r-l-n-1}{n-1}\)。分类讨论 \(x,y\) 是否在楼的两侧即可,然后枚举 \(x,y\) 的高度即可。这个就很板了吧。

P5505 [JSOI2011] 分特产

懒得概括题意.jpg

\(\mathbb{S}\text{olution}\)

看到每个盒子都得有东西,考虑二项式反演。我们设 \(g(x)\) 表示有恰好 \(x\) 个人没有获得东西,然后用 \(f(x)\) 表示有至少 \(x\) 个人没有获得东西,二项式反演得到 \(g(x)=\sum_{i=x}^{n-1}(-1)^{i-x}\binom{n}{i}f(i)\)。然后对于这个 \(f(x)\) 可以直接插板,\(f(x)=\binom{n}{x}\prod_{i=1}^{m}\binom{a_i+n-m-1}{n-k-1}\)

CF559C Gerald and Giant Chess

给你一个 \(n\times m\) 的网格图,以及 \(q\) 个黑格,从左上走到右下,只能往下或往右,不能走到黑格子上,求方案数。

\(n,m \le 10^5\)\(q\le 2000\)

\(\mathbb{S}\text{olution}\)

考虑容斥,我们用总次数减去原点到达黑色点的路径数。我们用一个 dp 去求即可。

P4859 已经没有什么好害怕的了

给你一个序列 \(\{a_i\}\) 和序列 \(\{b_i\}\)。两两配对,统计 \(a_i>b_j\) 的个数比 \(a_i<b_j\) 的个数恰好多 \(k\) 组的方案数

\(1\le n \le 2000\)

\(\mathbb{S}\text{olution}\)

我们考虑先复原一下,\(a_i>b_j\) 的组数 \(x=\frac{n+k}{2}\)\(a_i<b_j\) 则是 \(\frac{n-k}{2}\)。设 \(g(x)\) 表示恰好 \(x\)\(a_i<b_j\) 的情况,然后二项式反演设 \(f(x)\) 表示至少 \(x\) 组的方案数,\(g(x)=\sum_{i=x}^{n-1}(-1)^{i-x}\binom{i}{x}f(i)\)。我们有一个朴素的转移方程,设 \(dp_{i,j}\) 表示前 \(i\) 个里头选了 \(j\)\(a_i<b_j\),转移方程为 \(dp_{i,j}=dp_{i-1,j}+(l_i-1-j)dp_{i-1,j-1}\)。这里的 \(l_i\) 表示 \(b_{l_i}<a_i<b_{l_i+1}\)。我们知道 \(f(x)=dp_{n,x}(n-x)!\),直接大力二项式反演即可。

AT_arc140_f [ARC140F] ABS Permutation (Count ver.)

P10005 [集训队互测 2023] 基础寄术练习题

AT_arc139_d [ARC139D] Priority Queue 2

QOJ7838 往日之影

怎么集训队互测起手。感觉不是很可做,先放这里。

posted @ 2025-12-16 12:01  Vsinger_洛天依  阅读(27)  评论(1)    收藏  举报