2024.6.23 - 6.30
中考?
不做评价。
Question 1 - AGC023E Inversions
给定一个长度为 \(n\) 的正整数序列 \(A\),对于一个长度为 \(n\) 的全排列 \(P\),记 \(I(P)\) 表示 \(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))\) 个合法位置,故总方案数为:
记 \(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\)),所以:
扫描 \(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)\),求如下表达式的值:
\(1\leq n,m\leq 2\times 10^5\),保证询问中不会包含下标大于 \(n\) 的元素。
首先,\(t+dj+k\) 与 \(i\) 无关,故原式化为:
然后前缀和一下,得到:
化简到头了,我们观察题目限制:保证询问中不会包含下标大于 \(n\) 的元素。说明 \(d < \sqrt{n}\)。
再观察式子:\(s+di+j\),我们要把 \(i\) 扔掉,于是我们需要一个从某个位置 \(p\) 开始,每次减去 \(d\) 直到到头(减完小于 \(1\))的一个前缀和,记为 \(T_{d,p}\),表达式为:
因原式为:
将 \(T\) 代入原式化简得到:
预处理 \(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 道洛谷紫模拟。