CF1637G Birthday 题解

· · 题解

:::::info[题目基本信息] 考察:构造(3000)。
题目简述:

- 选定 $x,y$ 满足 $x,y\in[1,n]$ 且 $x\ne y$,同时进行操作 $a_x\leftarrow a_x+a_y$ 和 $a_y\leftarrow|a_x-a_y|$。 你想让 $\{a_n\}$ 中的元素都为一个数,在此基础上你想让这个数最小,在此基础上你想让操作数不超过 $20n$,问是否有解,若有解构造方案。 数据范围: - $1\le T\le 25000

然后我们考虑选择两个相同的数操作 1 次得到 0,但是注意,这两个数不能等于 2^{\lceil\log_2 n\rceil}
结论 2:当 n\ne 2 时,一定能得到一个 0(下文简称序列合法)。
:::::success[证明] 首先当 n2 的非负整数次幂时,长度为 n 的序列合法当且仅当长度为 n-1 的序列合法。
然后一个长度为 nn 不是 2 的非负整数次幂,下同)的序列,操作一次后会产生 n-pos2^{\lceil\log_2 n\rceil},且由于向下的两个递归长度一定小于 pos,所以不会再产生 2^{\lceil\log_2 n\rceil},所以最后一共会有 n-pos2^{\lceil\log_2 n\rceil},所以有 pos 个不是 2^{\lceil\log_2 n\rceil},在 \lfloor\log_2 n\rfloor+1<pos 时序列一定合法,令 t=\lfloor\log_2 n\rfloor\in\mathbb Z,解不等式:

\lfloor\log_2 n\rfloor+1<pos\\\Leftrightarrow\lfloor\log_2n\rfloor+1<2^{\lfloor\log_2n\rfloor}\\\Leftrightarrow t+1<2^t\\\Leftrightarrow t\ge 2\\\Leftrightarrow n\ge 4

接下来对 n=2,3 时进行检验(CF 还怪良心,样例就是这两个),发现 n=2 不合法,n=3 合法。
证毕。
::::: 所以我们直接 \Theta(n)(可能由于实现方式导致 \Theta(n\log n),但是肯定远远跑不满)找到相同的数构造出一个 0,然后让其它数暴力乘 2,最后还原 0 即可。
此时,构造数无论是递归部分还是暴力乘 2 部分显然都是 \Theta(n\log n) 级别,但是两者都远远跑不满,实测在 n=5\times 10^4 时操作数约为 2.1\times 10^5,虽然此时的操作数比序列长度不是最大的,但是可以看出即使最大时也并不大,通过暴力计算发现该比值最大为 6.76
然后做完了。
时间复杂度为 \Theta(n\log n)(如果实现较劣可能变成 \Theta(n\log^2 n)),空间复杂度为 \Theta(n)