2023.10.09 考试总结
T1
首先题目意思很好理解,就是统计整除分块种类数。
经过打表不难发现最后的 \(a\) 序列是 \(1\) 个 \(1\),\(2\) 个 \(2, 3\),\(3\) 个 \(4, 5\),\(4\) 个 \(6, 7\) ...... 然后不难发现我们呢去暴力枚举这个区间是 $ \sqrt{n}$ 的,然后就直接 \(O(1)\) 统计一个区间内有多少个数是 $ \bmod m = r$ 的就好了。
T3
我们考虑弱化问题,使得 \(a_i<L\) 。
这是一个经典的问题,我们将 \(a\) 从小到大排序之后,答案就是 \(\prod_{i=1}^n a_i-i+1\) 。证明略。
我们可以将一个数拆分为两个部分,一部分是 \(0,1,...,a_i-a_i \bmod L-1\) ,二部分就是 \(a_i-a_i \bmod L,...,a_i-1\) 。我们发现,对于一个数,如果其存在一部分,那么这个一部分会长于全部的二部分。所以我们优先填一部分。假设我们在第二部分填了 \(j\) 个,那么第一部分(假设下标集合为 \(S\) )的贡献就是:
这个式子我们理解一下,第一部分就是描述了每一个余数的选择,如果一个数为 \(x\) ,那么在它的第二部分有 \(\lfloor \dfrac{x}{L}\rfloor\) 个完整的余数循环节 \(0,1,...,L-1\) 。所以对于每一个余数有这么多种选择。第二部分是最好理解的,我们枚举了一个位置可以选择的余数。
我们将序列 \(\{a\}\) 依据 \(a \bmod L\) 从小到大排序,之后考虑动态规划。
我们令 \(f_{i,j}\) 表示我们考虑到了下标为 \(i\) 的元素,在这之前,我们选择了 \(j\) 个元素作为第一部分。
-
\(f_{i,j}=f_{i-1,j-1} \times ((a_i \bmod L)-j+1)\) 。我们依照刚刚讲的 \(a_i<L\) 的方式填了第一部分。
-
如果一个数选择第二部分,我们并不好维护贡献的 \(\prod_{i=L-j}^{L-n+1} i\) ,但是可以发现,这个在 \(j\) 一定的时候是一个定值,所以我们在动态规划的过程中只维护 \(\prod_{i=L-j}^{L-n+1} i\) 。固然有 \(f_{i,j}=f_{i-1,j}\times \lfloor \dfrac{a_i}{L}\rfloor\)
最后因为我们的第二部分没有算上阶乘,所以答案应该带上:
总体时间复杂度是 \(O(n^2)\) 的。

浙公网安备 33010602011771号