题目名称 3801. [JZOI 2022 day2]按位排序
输入输出 bitsort.in/out
难度等级 ★★
时间限制 3000 ms (3 s)
内存限制 256 MiB
测试数据 10
题目来源 GravatarBenjamin 于2022-11-23加入
开放分组 全部用户
提交状态
分类标签
枚举 模拟 排列组合
查看题解 分享题解
通过:1, 提交:1, 通过率:100%
GravatarBenjamin 100 4.404 s 3.90 MiB C++
关于 按位排序 的近10条评论(全部评论)

3801. [JZOI 2022 day2]按位排序

★★   输入文件:bitsort.in   输出文件:bitsort.out   简单对比
时间限制:3 s   内存限制:256 MiB

【题目描述】

鲍勃发明了一种神奇的排序算法:按位排序。用该算法对一个序列进行排序之后,拆出这个序列二进

制表示的每一位来看,都是有序的(升序或者降序都可以)。

聪明的你很快意识到,并不是所有的序列通过调换顺序都能达到二进制每一位都是有序的效果。

刚刚学习了编程知识的你决定将鲍勃的算法用代码实现出来,并向他证明有的序列是可以通过这种排序算

法产生结果,但是有些序列是不能产生正确结果的。

鲍勃正准备公开发表他的错误算法,请你赶快阻止他吧!

【输入格式】

第一行输入一个正整数 $T (1 ≤ T ≤ 10)$,表示有 T 组数据。

对于每组数据,第一行一个整数 $n(1 ≤ n ≤ 2 × 10^5)$, 代表原始序列的长度。

其后一行 $n$ 个整数 $a_1, a_2, ..., a_n(0 ≤ a_i < 2^{30})$。

【输出格式】

对于每组数据,输出一行:

如果无解,输出”$No$ $Solution$”(不包括引号)。

如果有解,输出一行 $n$ 个整数,代表排序后的结果。如果有多种解,请你输出字典序最小的那一种。

两个序列的字典序比较方式是从左到右找到第一个不同的元素,比较该元素的大小。

【样例1输入】

2
5
2 3 4 6 6
3
3 5 6

【样例1输出】

3 2 6 6 4
No Solution

【样例2输入输出】

点击下载样例2 

【数据规模与约定】

测试点 $1$:$n \leq 10$,无特殊性质;

测试点 $2\leq4$:$n \leq 1000,a_i <= 2^{10} − 1$;

测试点 $5\leq7$:$n \leq 2 × 10^5 $,保证有解;

测试点 $8\leq10$:$n \leq 2 × 10^5 $,无特殊性质;

【来源】

焦作一中 NOIP 2022 模拟赛2022.11.23 pro1