2024.6.23 - 6.30

中考?

不做评价。

Question 1 - AGC023E Inversions

给定一个长度为 \(n\) 的正整数序列 \(A\),对于一个长度为 \(n\) 的全排列 \(P\),记 \(I(P)\) 表示 \(P\) 的逆序对数量,求:

\[\underset{\forall 1\leq i\leq n, P_i\leq A_i}{\sum} I(P) \]

\(1\leq n\leq 2\times 10^5, 1\leq A_i\leq n\)


满足条件的 \(P\) 的数量

\(A\) 升序排列为 \(B\),假设考虑到第 \(i\) 个位置,上限为 \(B_i\),有 \((B_i - (i-1))\) 个合法位置,故总方案数为:

\[T = \overset{n}{\underset{i=1}{\prod}} (B_i - i + 1) \]

\(f_i = B_i - i + 1\)

\(I(P)\) 的相关推导

考虑每一对满足 \(1\leq i < j\leq n\)\((i,j)\) 的贡献 \(g(i,j)\),即 \(T\) 个方案中满足 \(P_i > P_j\) 的方案数量,讨论:

\(A_i < A_j\)

由于 \(P_i > P_j\),所以将 \(A_j\) 直接视为 \(A_i\) 没有任何影响。

顺序考虑每一个 \(B_i\),记 \(c_i\) 表示原 \(A_i\) 的排名。

\((P_i,P_j)\)\(\binom{f_i}{2}\) 种方案数,然后其余的 \(P_x\) 的方案数为 \(\dfrac{T}{f_if_j}\),当然,如果 \(P_j\)\([1,B_i]\) 内取值,对于满足 \(c_i < c_k < c_j\)\(k\),其选择数量少了 \(1\)(不能取 \(P_j\)),所以:

\[g(i,j) = \dfrac{T(f_i-1)}{2f_j} \underset{c_i < c_k < c_j}{\prod} \dfrac{f_k-1}{f_k} \]

扫描 \(j\),我们需要一次性求出 \(\underset{i<j}{\sum} g(i,j) = \dfrac{T}{2f_j} \underset{i< j}{\sum} (f_i-1)\underset{c_i < c_k < c_j}{\prod} \dfrac{f_k-1}{f_k}\)

于是考虑 \(h(i,j) = (f_i-1)\underset{c_i < c_k < c_j}{\prod} \dfrac{f_k-1}{f_k}\),固定 \(i\),当 \(j\gets j+1\) 时,有 \(h(i,j+1) = h_{i,j}\times \dfrac{f_j-1}{f_j}\)

上线段树维护即可。

\(A_j < A_i\)

考虑逆序对会g,所以考虑顺序对,将上面 \(i,j\) 倒置即可,而方案数需要用 \(T\) 减去该种情况的方案数。

相当于这里的方案数的系数是 \(-1\),统一放在线段树里维护,由于还有多个 \(T\) 要加上,用一个树状数组维护满足 \(i<j, A_i > A_j\) 的相关数据。

最终时间复杂度为 \(\mathcal{O}(n\log_2 n)\)

Question 2 - [THUPC2021 初赛] 区间矩阵乘法

给定长度为 \(n\) 的数列 \(a\),以及 \(m\) 组询问 \((d,s,t)\),求如下表达式的值:

\[\underset{i,j,k\in [0,d)}{\sum} a_{s+di+j}\times a_{t+dj+k} \]

\(1\leq n,m\leq 2\times 10^5\),保证询问中不会包含下标大于 \(n\) 的元素。


首先,\(t+dj+k\)\(i\) 无关,故原式化为:

\[\underset{i,j\in [0,d)}{\sum} a_{s+di+j}\times \underset{k\in [0,d)}{\sum} a_{t+dj+k} \]

然后前缀和一下,得到:

\[\underset{i,j\in [0,d)}{\sum} a_{s+di+j}\times (S_{t+d(j+1)-1} - S_{t+dj-1}) \]

化简到头了,我们观察题目限制:保证询问中不会包含下标大于 \(n\) 的元素。说明 \(d < \sqrt{n}\)

再观察式子:\(s+di+j\),我们要把 \(i\) 扔掉,于是我们需要一个从某个位置 \(p\) 开始,每次减去 \(d\) 直到到头(减完小于 \(1\))的一个前缀和,记为 \(T_{d,p}\),表达式为:

\[T_{d,p} = \underset{k\ge 0, p-kd\ge 1}{\sum} a_{p-kd} \]

因原式为:

\[\underset{j\in [0,d)}{\sum} (S_{t+d(j+1)-1} - S_{t+dj-1}) \times \underset{i\in [0,d)}{\sum} a_{s+di+j} \]

\(T\) 代入原式化简得到:

\[\underset{j\in [0,d)}{\sum} (S_{t+d(j+1)-1} - S_{t+dj-1}) \times (T_{d,s+d(d-1)+j} - T_{d, s-d+j}) \]

预处理 \(S,T\),枚举求值,则时间复杂度为 \(\mathcal{O}(n\sqrt{n} + m\sqrt{n})\)

Question 3 - 付公主的背包

\(n\) 种物品,第 \(i\) 种物品的个数为无穷,体积为 \(v_i\),同种物品两两不区分,对所有 \(k\in [1,m]\) 求出用这些物品装满一个体积为 \(k\) 的背包的方案数。

答案对 \(998244353\) 取余。

\(1\leq n,m\leq 10^5\)


考虑第 \(i\) 种物品的生成函数:\(G_i(x) = \underset{k\ge 0}{\sum} x^{kv_i} = \dfrac{1}{1 - x^{v_i}}\)

所以需要求出所有物品的生成函数的乘积,可以用卷积求出所有 \((1 - x^{v_i})\) 的乘积,然后一个求逆搞定。

但是该种方法较劣,不妨采用 ln-exp,于是答案为 \(\exp(\underset{1\leq i\leq n}{\sum} \ln G_i(x))\)

首先 \(\ln G_i(x) = \ln \dfrac{1}{1 - x^{v_i}} = \ln (1 - x^{v_i})^{-1} = - \ln (1 - x^{v_i}) = - ( - \underset{j\ge 1}{\sum} \dfrac{x^{jv_i}}{j}) = \underset{j\ge 1}{\sum} \dfrac{x^{jv_i}}{j}\)

开个桶,对 \(v_i\) 相同的物品当作 \(\ln\) 的系数,最后 \(\exp\) 一下即可。

时间复杂度为 \(\mathcal{O}(n\log_2 n)\)

Question 4 - 十二重计数法

\(n\) 个球,\(m\) 个盒子,分别对【球是否两两不同】【盒子是否两两不同】【每个盒子的装球限制:无限制/至少一个/至多一个】求方案数。

\(1\leq n,m\leq 2\times 10^5\)


组合数学练习题,涵盖:快速幂 + 容斥原理 + 排列组合 + 斯特林数 + 划分数 + 生成函数。

Question 5 - 琪露诺的冰雪小屋

我的第 4 道洛谷紫模拟。

posted @ 2024-06-23 12:05  ydzr00000  阅读(15)  评论(0编辑  收藏  举报