CF1152B Neko Performs Cat Furrier Transform

题目描述

Cat Furrier 变换是一种在猫程序员中非常流行的算法,用于制造“长猫”。作为有史以来最伟大的猫程序员之一,Neko 想利用这一算法来创造完美的长猫。 假设我们有一只编号为 $x$ 的猫。完美的长猫是指编号等于 $2^m - 1$ 的猫,其中 $m$ 是某个非负整数。例如,$0$、$1$、$3$、$7$、$15$ 等等,这些数字都适合做完美的长猫。 在 Cat Furrier 变换中,可以对 $x$ 执行以下操作: - (操作 A):你可以选择任意非负整数 $n$,并将 $x$ 替换为 $x \oplus (2^n - 1)$,其中 $\oplus$ 表示[按位异或运算](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。 - (操作 B):将 $x$ 替换为 $x+1$。 第一个执行的操作必须是 A 类型,第二个是 B 类型,第三个又是 A 类型,依此类推。形式化地说,如果我们按执行顺序给操作编号,那么奇数编号的操作必须是 A 类型,偶数编号的操作必须是 B 类型。 Neko 想要大规模生产完美的长猫,因此对于每只猫,Neko 只希望最多执行 $40$ 次操作。你能帮 Neko 写出一份变换方案吗? 注意,不要求操作次数最少。你只需要保证操作次数不超过 $40$ 次即可。

输入格式

一行包含一个整数 $x$($1 \le x \le 10^6$)。

输出格式

第一行输出一个整数 $t$($0 \le t \le 40$),表示需要执行的操作次数。 接下来每个奇数编号的操作,输出对应的 $n_i$。也就是说,输出 $\lceil \frac{t}{2} \rceil$ 个整数 $n_i$($0 \le n_i \le 30$),表示在对应步骤中将 $x$ 替换为 $x \oplus (2^{n_i} - 1)$。 如果有多组可行解,你可以输出任意一组。在本题的约束下,至少存在一组可行解。

说明/提示

在第一个测试样例中,一种变换过程如下:$39 \to 56 \to 57 \to 62 \to 63$。更具体地说: 1. 选择 $n=5$,$x$ 变为 $39 \oplus 31$,即 $56$。 2. 将 $x$ 加 $1$,变为 $57$。 3. 选择 $n=3$,$x$ 变为 $57 \oplus 7$,即 $62$。 4. 将 $x$ 加 $1$,变为 $63 = 2^6 - 1$。 在第二个和第三个测试样例中,数字已经满足目标要求。 由 ChatGPT 4.1 翻译