Loading

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\) )的贡献就是:

\[(\prod_{x \in S} \lfloor \dfrac{a_x}{L}\rfloor)(\prod_{i=L-j}^{L-n+1} i) \]

这个式子我们理解一下,第一部分就是描述了每一个余数的选择,如果一个数为 \(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\)

最后因为我们的第二部分没有算上阶乘,所以答案应该带上:

\[\sum_{j=1}^n (f_{n,j} \times \prod_{k=L-j}^{L-n+1} k) \]

总体时间复杂度是 \(O(n^2)\) 的。

posted @ 2023-10-09 15:43  Alexande  阅读(35)  评论(0)    收藏  举报