CF1637G Birthday 题解
:::::info[题目基本信息]
考察:构造(
题目简述:
-
2\le n\le 5\times 10^4 -
\sum n\le 5\times 10^4 ::::: :::::info[闲话] 神秘构造题。
本题中所有结论均可使用打表发现。
::::: 结论 1:若有解,则最后序列中含有的唯一一个数为2^{\lceil\log_2 n\rceil} 。 :::::success[证明] 先把这个结论拆成答案上界和下界均为2^{\lceil\log_2 n\rceil} 证明。
对于答案上界,可以直接构造证明,如何构造就留在后面,所以我们先证明答案下界。
结论 1.1:最终的数一定不是奇素数的倍数。
::::success[证明] 考虑反证法。
设一奇素数为P 。
若对a_x,a_y 进行操作,设p=a_x\bmod P,q=a_y\bmod P ,则(a_x+a_y)\bmod P=(p+q)\bmod P,|a_x-a_y|\bmod P=|p-q|\bmod P ,如果我们想让最后的数是奇素数的倍数,那么我们需要在p\ne 0\lor q\ne 0 的条件下凭空制造出(p+q)\bmod P=|p-q|\bmod P=0 ,同时由于p,q\in[0,P)\cap\mathbb N ,那么我们得到:(p+q)\bmod P=0\Rightarrow p=q=0\lor p+q=P\Rightarrow p+q=P |p-q|\bmod P=0\Rightarrow p=q 解得
p=q=\dfrac{P}{2}\notin \mathbb N ,产生矛盾。
证毕。
:::: 最后的数不是奇素数的倍数,那么它一定能被表示为2^k (k\in \mathbb N )。
由于操作a_x,a_y 会产生一个更大的数a_x+a_y ,所以答案下界就是2^{\lceil\log_2 n\rceil} 。
答案下界证毕。
::::: 现在我们要构造方案,注意到操作两个数0,x 能变成x,x ,再操作一次0,2x ,所以我们在序列有0 时能够将任意一个数乘2 ,所以我们考虑将这些数全部操作成2 的非负整数次幂,比较容易想到具体过程:
以序列\{a_{10}\}=\{1,2,3,4,5,6,7,8,9,10\} 为例: - 若
n 自身就是2 的非负整数次幂那么我们就递归大小为n-1 的子问题,但是这里10 不是2 的非负整数次幂,要继续往下走。 - 先取
pos=2^{\lfloor\log_2 n\rfloor}=8 ,在pos 左右对称取数操作,变成\{1,2,3,4,5,\color{red}4\color{black},\color{blue}2\color{black},8,\color{blue}16\color{black},\color{red}16\color{black}\} 。 - 观察发现子序列
\{1,2,3,4,5\} 是一个更小的子问题,子序列\{4,2\} 整体除以2 后也是一个子问题,递归处理,当序列长度不超过2 时停止递归,因为已经合法。 - 最终,序列变为
\{1,2,2,4,8,4,2,8,16,16\} ,操作次数为3 次。
然后我们考虑选择两个相同的数操作
结论 2:当
:::::success[证明]
首先当
然后一个长度为
接下来对
证毕。
:::::
所以我们直接
此时,构造数无论是递归部分还是暴力乘
然后做完了。
时间复杂度为