#P16457. 旋律序列工坊

旋律序列工坊

题目背景

音乐程序设计师许言正在制作一套“旋律片段生成器”。一段旋律可以用整数序列表示,而从中按原顺序选出若干严格升高的音符,就能形成一段上升旋律片段。

系统只关心片段本身的数值序列:即使同一段上升旋律能从原序列中的多个不同位置选出,也只会被记录一次;空旋律也会被计入。现在许言希望构造一段尽可能短的旋律,使系统恰好识别出指定数量的不同上升旋律片段。

题目描述

给定整数 KK,构造一个整数序列满足其上升子序列种数为 KK,你的得分与序列长度相关。注意如果某个上升子序列出现了多次,应只计数一次,空序列算作一个上升子序列。

输入格式

多组测试数据,第一行一个整数 TT 表示测试数据组数,接下来 TT 行每行一个整数 KK

输出格式

对于每组测试数据,输出两行:第一行包含一个整数 LL,表示序列长度。第二行包含 LL 个整数,表示输出序列。请确保输出的 L128L \leq 128,并且序列中的数在区间 [0,999][0, 999] 范围内。

样例解释 1

注意,样例输出仅包含一组合法输出。下面是对样例输出的解释:

对于第1组数据,上升子序列有以下8个:()()(1)(1)(4)(4)(5)(5)(1,4)(1,4)(4,5)(4,5)(1,5)(1,5)(1,4,5)(1,4,5)。需要注意的是,(1)(1) 在序列中出现了多次,但应该只计入一次。

对于第2组数据,上升子序列有以下7个:()()(0)(0)(1)(1)(8)(8)(9)(9)(1,8)(1,8)(1,9)(1,9)

对于第3组数据,上升子序列有以下10个:()()(0)(0)(1)(1)(4)(4)(9)(9)(0,1)(0,1)(1,4)(1,4)(1,9)(1,9)(4,9)(4,9)(1,4,9)(1,4,9)

数据范围与提示

1K5×10181 \leq K \leq 5 \times 10^{18}

本题有部分分:对于每组数据,在输出合法的前提下,根据以下表格,你可以获得对应百分比的分数。一个测试点的分数为其下所有测试数据的分数的最小值。

输出长度 LL 分数
[129,+][129, +\infty] 00%
[120,128][120, 128] 20%20\%
[112,119][112, 119] 40%40\%
[104,111][104, 111] 60%60\%
[99,103][99, 103] 80%80\%
[0,98][0, 98] 100%100\%