#CF1971G. 异或交换(XOUR)
异或交换(XOUR)
异或交换(XOUR)
时间限制:2s
空间限制:256MB
题目描述
给定一个由 个非负整数组成的数组 。
当且仅当 时,你可以交换位置 和 上的元素,其中 表示按位异或运算。
请找出经过任意次数的合法交换后,能够得到的字典序最小的数组。
对于两个不同的等长数组 和 ,设 是它们第一个不同的位置。如果 ,则称数组 的字典序小于数组 。
输入格式
第一行包含一个整数 ,表示测试用例的数量。
每个测试用例的第一行包含一个整数 ,表示数组的长度。
每个测试用例的第二行包含 个整数 ,表示数组的元素。
输出格式
对于每个测试用例,输出一行 个整数,表示能够得到的字典序最小的数组。
样例输入 1
4
4
1 0 3 2
5
2 7 1 5 6
8
1 2 1 2 1 2 1 2
4
16 4 1 64
样例输出 1
0 1 2 3
1 5 2 6 7
1 1 1 1 2 2 2 2
16 4 1 64
样例解释
对于第一个测试用例,可以交换任意两个元素,因此可以得到升序排列的数组。
对于第二个测试用例,可以交换 和 、 和 、 和 。这三对数的异或值依次为 、、,从而得到所求数组。
数据范围
- 对于所有数据,满足 。
- 对于所有数据,满足 。
- 对于所有数据,满足 。
- 所有测试组共同满足 。
| 子任务编号 | 分值 | 特殊限制 |
|---|---|---|
| 1 | 15 | ,且一个输入文件内的 |
| 2 | 25 | ,且一个输入文件内的 |
| 3 | 30 | 所有元素均满足 |
| 4 | 无特殊限制 |