1 条题解
-
0
自动搬运
来自洛谷,原作者为

NaCly_Fish
北海虽赊,扶摇可接。搬运于
2025-08-24 22:05:26,当前版本为作者最后更新于2024-06-27 19:06:28,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
给出一个理论时间复杂度 的算法,但是常数可能比较大。
前面的做法和官方题解是一致的,我们可以枚举 ,计算有多少个序列会生成 。
设 表示 范围内的整数中,有多少个和 在模 下同余。由于 只有两种取值,我们设较小的为 (较大的就是 )。然后统计出三个数组(其中 ):
-
:表示 ,且 的有序数对数量。
-
:表示 ,且 的有序数对数量。
-
:表示 ,且 的有序数对数量。
对于 ,能够生成 的序列数量就是
$$R^n-n^{A_r}(\text e^{Lx}+\text e^{(L+1)x}-1)^{B_r}(2\text e^{(L+1)x}-1)^{C_r}\text e^{Lx} $$而 很简单,数量就是 。
每次暴力地 计算,然后开个 map 存一下答案就可以通过这题了。
官方题解用到了一个猜想:本质不同的 的数量是 级别的。我也没能将其证明或证伪,不过通过另一种思路,可以做到更优的时间复杂度。
我们设 和 分别是 和 不限制大小关系的情况下,按原规则统计的数量,我们将说明:
由 就可以唯一确定出 和 。
首先有一个显然的关系:;
然后还有一个是:,其中 。其中第二个式子中左侧的意义是:选的 需要 ,而 没有限制。显然对于每个 ,都存在一个 使得 ,所以总数就是等式右侧了。
然后如何得到真正的 呢? 减去 且 的解的个数就是 ,由此也直接得到 。对于 的计算也是一样的。
至此,聪明的你能想到接下来该怎么做吗?
我们设:
$$F(i,j,k)=n^{(k-i)/2}(\text e^{Lx}+\text e^{(L+1)x}-1)^{|S|-k}(2\text e^{(L+1)x}-1)^{(P-1-2|S|+k-j)/2}\text e^{Lx} $$其中 。对于每组 我们都能以 的时间复杂度计算出所有 ,因为这是经典问题。
这样对于每个 ,能生成 的序列数量就是 。
最后我们还要快速算出所有 ,这个做法也在 [SDOI2015] 序列统计 中出现过了。我们只需要把所有 的 取离散对数,然后计算一次卷积即可。
update:我们实际上并不需要对每组 都计算,因为可能出现的 只有 四种,由此也可以保证计算幂级数的乘方时,指数必定是整数,实现上会方便一些。
-
- 1
信息
- ID
- 3963
- 时间
- 3000ms
- 内存
- 500MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者