lmxcslD

· · 题解

n 为质数

解法:其中一种答案序列为 n1 或一个 n ,将两者的较大值输出即可。

证明:对于一个恰好包含 m1 的序列,它的乱斗值不超过 f(m)=m(k-1)^2+(n-m-k)^2

容易发现上述解法的答案即为 \max(f(0),f(n)) 。考虑随着 m 的增大 f(m) 的变化规律。

f(m+1)-f(m)=(k-1)^2-2(n-m-k)+1

根据上式容易得到当某一个 m' 满足 f(m')\ge f(m'-1) 时,对于任意 m\ge m' 都满足 f(m)\ge f(m-1)

换句话说,函数 f(m) 是一个单谷函数,而对于它的极值,必定会在其定义域的两个极值处取到,即 f(0)f(n)

k=1

现在我们不需要考虑 p_i-k<0 的情况。感觉一下,发现 p_i 越大性价比越高。

设不超过 n 的最大质数为 P ,如果答案序列包含 P ,我们将问题递归到 (n-P,k) ,否则 p_i<P

我们首先忽略掉 p_i 为质数这一条件,若一个序列存在两个数 1\le p_i\le p_j<P-1 ,将 p_j\gets p_j+1p_i\gets p_i-1 一定更优。

这样一直调整下去,当 n-P+1<P 时,最终一定会调整到 p=(P-1,n-P+1)

容易发现当 n 比较大时, P 远大于 n-\sqrt n ,即 (P-1)^2\ge (P-2)^2+(n-P)^2

具体而言 n-P 的最大值取决于质数间隙,在 n 取到 10^9 时最大质数间隙也不过几百。

n 比较小的时候可以暴力 DP但实践证明答案序列必定包含 P

至于 P 怎么找,可以直接暴力枚举,再 O(\frac{\sqrt n}{\ln n}) 判断是否为质数,由于质数间隙很小且跑不满,故可以通过。

顺带一提,如果 O(\sqrt n) 判断是否为质数也可以通过,感觉很难卡......

正解

我们延续 k=1 时的思路,找到不超过 n 的最大质数 P

若答案序列包含超过 n-P1 ,则答案序列必定为 n1 ,证明类似 n 为质数时的思路。

接下来考虑答案序列中 1 的数量不超过 n-P 的情况,如果答案序列包含 P 则依旧将问题递归到 (n-P,k)

否则的话首先忽略掉 p_i 为质数这一条件,还是按照 k=1 的思路不断调整序列 p

注意可以忽略掉 1<p_i<k 时的情况,因为可以将它们调成 1 使乱斗值更大。

设序列 p 中有 m1 ,当 n-m-P+1<P 时,最终 p1 外仅包含 P-1n-m-P+1

根据 n 为质数中的思路,容易得到若 p 包含 P-1 时,剩下的数必定为 n-P+11 或一个 n-P+1m\ge 1 时矛盾。

现在我们说明了该情况下 m 必定为 0 ,接下来考虑 (P-k)^2(P-k-1)^2+(n-P-k+1)^2 的大小关系。

考虑当 n\le (k-1)^2 时, n^2\le n(k-1)^2 ,即答案序列必定由 n1 组成。

n>(k-1)^2 时且 n 比较大时,依旧由于质数间隙很小,故 (P-k)^2 必定大于 (P-k-1)^2+(n-P-k+1)^2

n 比较小的时候可以暴力 DP但实践证明答案序列在这种情况下必定包含 P