题目背景
小 U 对于从一个集合映射到一个数的函数很感兴趣,而 mex 是一个很好的例子。
mex(S) 指的是在集合 S 中没有出现过的最小非负整数。
题目描述
多组数据。
每组数据,给定 c,要求构造序列 a1,a2,...,an∈[0,2×109] 满足
S=∅,S⊆{1,2,...,n}∑mex(aS1,aS2,...,aS∣S∣)=c其中要求 1≤n≤40。可以证明在该题的数据范围内如果存在解,则在 1≤n≤40 时一定存在解。
输入格式
第一行一个整数,数据组数 T。
之后 T 行每行一个非负整数 c。
输出格式
对于每组数据:
如果无解,则仅输出一行一个整数 −1。
否则,第一行输出一个正整数 n。
第二行输出 n 个非负整数 a1,a2,...,an。
提示
样例解释
我有一个绝妙的解释,可惜这里写不下。
数据范围
id 为 subtask 编号。
id |
特殊性质 |
分数 |
id |
特殊性质 |
分数 |
1 |
c≤10 |
3 |
6 |
c≤1×106 |
15 |
2 |
c≤30 |
6 |
7 |
T≤10 |
5 |
3 |
c≤500 |
8 |
T≤5×104 |
15 |
4 |
c≤2×103 |
5 |
9 |
T≤8×104 |
10 |
5 |
c≤1×105 |
20 |
10 |
|
15 |
对于 100% 的数据,T≤105,0≤c≤2×109。
提示
由于部分 STL 的常数较大,如果认为你的时间复杂度没有问题却 TLE,请不要使用 STL。
请注意输出效率,这里提供一种快写模板(请不要用以下代码输出负数):