1 solutions

  • 0
    @ 2024-6-9 14:08:38

    本题最初始的设想

    对于序列 AiA_i 的任意 kk 个数字之和互不相等,但是通过暴力的方法计算出 k=3k=3 的序列为:

    1,2,3,5,8,14,25,45,82,140...1, 2, 3, 5, 8, 14, 25, 45, 82, 140 ...

    可以计算出:

    求和数字
    82 , 45 , 14 141
    140 , 2 , 1 143
    140 , 3 , 1 144
    140 , 3 , 2 145
    140 , 5 , 1 146
    140 , 5 , 2 147
    140 , 5 , 3 148
    140 , 8 , 1 149
    140 , 8 , 2 150
    140 , 8 , 3 151
    82 , 45 , 25 152
    140 , 8 , 5 153
    140 , 14 , 1 155

    该样例下无法进行递推,因此加入限制条件: 序列为 SS 的「交响」应当按照组合 δ\delta 字典序增加的顺序从小到大演奏

    递推公式证明

    在组合 KK 下,对于序列 AiA_inn 个数的最大组合为:

    sum(δn+δn1+..+δnk+1)=i=nk+1nδi\begin{equation}\begin{split} sum(\delta_n + \delta_{n-1} + .. + \delta_{n-k+1})=\sum_{i=n-k+1}^{n}\delta_i \end{split}\end{equation}

    加入第 n+1n+1 个数时最小组合为:

    sum(δn+1+δ1+..+δk1)=δn+1+i=1k1δi=δn+1+C\begin{equation}\begin{split} sum(\delta_{n+1} + \delta_1 + .. + \delta_{k-1}) & =\delta_{n+1}+\sum_{i=1}^{k-1}\delta_i \\ & =\delta_{n+1}+C \end{split}\end{equation}

    使 (2)(2) 刚好大于 (1)(1) 则有:

    δn+1+i=1k1δi>i=nk+1nδi δn+1+i=1k1δi=i=nk+1nδi+1 δn+1=i=nk+1nδi+1i=1k1δi δn+1=i=nk+1nδii=2k1δi δn+1=i=nk+1nδiC \begin{equation}\begin{split} & \delta_{n+1}+\sum_{i=1}^{k-1}\delta_i>\sum_{i=n-k+1}^{n}\delta_i\\\ \Rightarrow\quad & \delta_{n+1}+\sum_{i=1}^{k-1}\delta_i=\sum_{i=n-k+1}^{n}\delta_i+1\\\ \Rightarrow\quad & \delta_{n+1}=\sum_{i=n-k+1}^{n}\delta_i+1-\sum_{i=1}^{k-1}\delta_i\\\ \Rightarrow\quad & \delta_{n+1}=\sum_{i=n-k+1}^{n}\delta_i-\sum_{i=2}^{k-1}\delta_i\\\ \Rightarrow\quad & \delta_{n+1}=\sum_{i=n-k+1}^{n}\delta_i-C\\\ \end{split}\end{equation}

    当然仍然存在一个问题,对于 K\forall K 应该如何确定 A1,...,AnA_1,...,A_n 的构造方法?

    完备性证明

    假设存在 kk 相关的函数 n=f(k)n=f(k) 作为临界值

    1. 公式 (3)(3) 需要在 n=f(k)n=f(k) 之后的位置成立
    2. n=f(k)n=f(k) 之前的数需要满足任意的 k1k-1 个数之和各不相同

    f(k)=2k1f(k) = 2k-1\\ 任意选取组合,在 C2k1kC_{2k-1}^{k} 时,总会存在同一个元素重叠,去掉任意重叠的选取元素,在 A1,...,A2k1A_1,...,A_{2k-1} 中寻取 KK 组合问题退化为 K1K-1 组合问题,满足要求

    因此序列 AAKK 下的递推定义为:

    1. A1,...,A2k1A_1,...,A_{2k-1}等价于 k1k-1 下的序列
    2. n=2kn=2k 之后使用公式(3)(3)递推

    时间复杂度

    先对 k(2k1)k*(2k-1) 打表,采用一般递推方法时,时间复杂度为 O(CKδi)109O(CK\delta_i)\approx 10^9 \quad 60分

    使用矩阵快速幂 O(CKlogδK3)2108O(CKlog\delta K^3)\approx 2*10^8 \quad 80分

    优化访存命中,在矩阵乘法中将 (i,j,k)(i,k,j)(i,j,k)\rightarrow(i,k,j) 矩阵乘法时间复杂度优化为原有 110\frac{1}{10}

    打表

    K 1 2 3 4 5 6 7 8 9
    1 1 2 3 4 5 6 7 8 9
    2 1 2 3 5 8 13 21 34 55
    3 5 8 14 25 45 82
    4 14 25 47 89

    Information

    ID
    55
    Time
    2000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    # Submissions
    9
    Accepted
    1
    Uploaded By