附加题 排列 (traditional) (1s,512M)
不想看看魔怔法老题面的可以直接看最后的形式化题意。(同时,若有歧义,均以形式化题意为准)
法老们利用行星的引力来加速飞船。假设飞船将依次以
p[0],p[1],…,p[n−1] 的轨道速度飞掠
n 颗行星。飞掠每颗行星时,法老科学家可以选择是否利用它来加速飞船。为了节省能量,当飞船以轨道速度
p[i] 飞掠一颗行星并完成加速后,它将不能再在以轨道速度
p[j]<p[i] 飞掠行星时进行加速。也就是说,选择用来加速的行星构成
p[0],p[1],…,p[n−1] 的一个递增子序列。
p 的子序列是从
p 中删除零个或多个元素得到的序列。例如,
[0]、
[]、
[0,2] 和
[0,1,2] 是
[0,1,2] 的子序列,但
[2,1] 不是。
科学家已经确认,总共有
k 种方案来选择行星对飞船进行加速,但是他们弄丢了轨道速度的记录信息(甚至包括
n 的大小)。不过他们记得
(p[0],p[1],…,p[n−1]) 是
0,1,…,n−1 的一个排列。这里的排列是包含从
0 到
n−1 每个整数恰好一次的序列。 你的任务是找出一个长度尽量小且符合要求的排列
(p[0],p[1],…,p[n−1])。
你要对
q 艘不同的飞船来解决该问题。对每艘飞船
i,你会得到一个整数
ki,表示选择行星加速飞船的不同方案数。你的任务是找出长度
n 足够小的轨道速度序列,使得从中恰好可以选出
ki 个轨道速度递增的行星子序列。
但很可惜,法老的飞船又受到了宇宙射线的影响,把 “递增子序列” 改为了 “最长递增子序列”。
一个递增子序列被称为最长的,当且仅当在整个排列中不存在一个包含数的个数严格比其更多的递增子序列。
因此,你的任务为找出长度
n 足够小的轨道速度序列,使得从中恰好可以选出
ki 个最长的轨道速度递增的行星子序列。
形式化题意:q 次询问,每次给定一个 ki ,你需要找出一个长度足够小(并不一定是最小)的 0,1,…,n−1 的排列,满足其不同的最长上升子序列的个数共有 ki 个。
例如,[1,0,2,4,3,5] 共有 4 个不同的最长上升子序列,分别为
[1,2,4,5],[0,2,4,5],[1,2,3,5],[0,2,3,5] 。
按以下格式读取输入:
第 1 行: q。
第 2+i 行( 0≤i≤q−1): ki。
输出 2q 行,每两行表示对于一组 ki 你构造的答案。
第 2i+1 行( 0≤i≤q−1):ni ,表示你对 ki 构造的排列长度。
第 2i+2 行( 0≤i≤q−1):ni 个整数,表示你构造的排列。
约束条件
1≤q≤100。
2≤ki≤109(对所有
0≤i≤q−1)。
共两个测试点
#1:(
10 分)
2≤ki≤90(对所有
0≤i≤q−1)。如果你给出的所有排列长度至多为
90 且结果正确,你将获得
10 分,否则获得
0 分。
#2:(
90 分)没有额外的约束条件。对该子任务,令
m 为你在所有场景中给出的排列的最大长度,则你的得分按下表来计算:
条件 |
得分 |
m≤90 |
90 |
90<m≤120 |
90−3m−90 |
120<m≤2000 |
80−24m−120 |
m>2000 |
0 |
样例
file