#P12572. [UOI 2023] An Array and Addition Again

    ID: 12425 远端评测题 1000ms 256MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2023Special Judge构造UOI(乌克兰)

[UOI 2023] An Array and Addition Again

Description

给定一个编号从 11100100 的数组 aa。初始时,对于 1i<1001 \leq i < 100ai=0a_i = 0,最后一个元素 a100=1a_{100} = 1

可以通过增量操作来修改数组 aa。要执行 mm增量操作,需要选择 mm 个整数 p1,p2,,pmp_1, p_2, \dots, p_m1pi<1001 \le p_i < 100),并按顺序执行赋值操作 api(api+api+1)a_{p_i} \leftarrow (a_{p_i} + a_{p_i + 1})ii11mm)。

给定一个整数 nn,找到一组增量操作序列,使得在执行完这些操作后,数组 aa 的第一个元素 a1a_1 等于 nn

Input Format

第一行包含两个整数 ttgg1t1001 \le t \le 1000g50 \leq g \leq 5)——分别表示输入数据的组数和测试块编号。

接下来的 tt 行,每行包含一个整数 nn1n10181 \le n \le 10^{18})——在执行完增量操作后,a1a_1 应该达到的目标值。

Output Format

对于每组输入数据,第一行输出一个整数 mm0m20000 \leq m \leq 2000)——增量操作的次数。

第二行输出 mm 个整数 pip_i1pi<1001 \le p_i < 100)——增量操作的参数。

如果存在多个正确答案,输出任意一个均可。

1 0
1
99
99 98 ... 7 6 5 4 3 2 1
2 0
3
16
101
99 98 ... 7 6 5 4 3 2 1 1 1
103
99 98 ... 7 6 5 4 4 3 3 2 2 1 1

Hint

为了清晰起见,题目描述中的输入样例已被简化。要得到正确答案,请将 ...\tt{...} 替换为从 979788 的整数序列。

以第二个样例的第二组输入数据为例,其中 n=16n = 16。在执行以下操作后,数组 aa 的前 88 个元素的变化如下:

  • p1=99p_1 = 99a=[0,0,0,0,0,0,0,0,,0,0,1,1]a = [0, 0, 0, 0, 0, 0, 0, 0, \ldots, 0, 0, 1, 1]
  • p2=98p_2 = 98a=[0,0,0,0,0,0,0,0,,0,1,1,1]a = [0, 0, 0, 0, 0, 0, 0, 0, \ldots, 0, 1, 1, 1]
  • \ldots
  • p93=7p_{93} = 7a=[0,0,0,0,0,0,1,1,,1,1,1,1]a = [0, 0, 0, 0, 0, 0, 1, 1, \ldots, 1, 1, 1, 1]
  • p94=6p_{94} = 6a=[0,0,0,0,0,1,1,1,,1,1,1,1]a = [0, 0, 0, 0, 0, 1, 1, 1, \ldots, 1, 1, 1, 1]
  • p95=5p_{95} = 5a=[0,0,0,0,1,1,1,1,,1,1,1,1]a = [0, 0, 0, 0, 1, 1, 1, 1, \ldots, 1, 1, 1, 1]
  • p96=4p_{96} = 4a=[0,0,0,1,1,1,1,1,,1,1,1,1]a = [0, 0, 0, 1, 1, 1, 1, 1, \ldots, 1, 1, 1, 1]
  • p97=4p_{97} = 4a=[0,0,0,2,1,1,1,1,,1,1,1,1]a = [0, 0, 0, 2, 1, 1, 1, 1, \ldots, 1, 1, 1, 1]
  • p98=3p_{98} = 3a=[0,0,2,2,1,1,1,1,,1,1,1,1]a = [0, 0, 2, 2, 1, 1, 1, 1, \ldots, 1, 1, 1, 1]
  • p99=3p_{99} = 3a=[0,0,4,2,1,1,1,1,,1,1,1,1]a = [0, 0, 4, 2, 1, 1, 1, 1, \ldots, 1, 1, 1, 1]
  • p100=2p_{100} = 2a=[0,4,4,2,1,1,1,1,,1,1,1,1]a = [0, 4, 4, 2, 1, 1, 1, 1, \ldots, 1, 1, 1, 1]
  • p101=2p_{101} = 2a=[0,8,4,2,1,1,1,1,,1,1,1,1]a = [0, 8, 4, 2, 1, 1, 1, 1, \ldots, 1, 1, 1, 1]
  • p102=1p_{102} = 1a=[8,8,4,2,1,1,1,1,,1,1,1,1]a = [8, 8, 4, 2, 1, 1, 1, 1, \ldots, 1, 1, 1, 1]
  • p103=1p_{103} = 1a=[16,8,4,2,1,1,1,1,,1,1,1,1]a = [16, 8, 4, 2, 1, 1, 1, 1, \ldots, 1, 1, 1, 1]

评分标准

前四个测试块允许使用不超过 300 次增量操作。

  • 44 分):n100n \leq 100
  • 66 分):n=k2n = k^2,其中 1k1001 \le k \le 100
  • 1010 分):n=(2k1)n = (2^k - 1),其中 kk 为整数;
  • 1313 分):nn 是斐波那契数(即 nn 属于序列 1,1,2,3,5,8,13,21,34,1, 1, 2, 3, 5, 8, 13, 21, 34, \dots);
  • (最多 6767 分):无额外限制。设使用的增量操作次数为 cc。如果 c300c \le 300,得 6767 分;否则得 $(17 + \left \lfloor \frac{2000 - c}{34} \right \rfloor)$ 分。

用于计算最后一个测试块得分的 C++\tt{C++} 代码如下:

((c <= 300) ? 67 : (17 + (2000 - c) / 34))

翻译由 DeepSeek V3 完成