A92172.极差最大化
入门
官方
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
给定一个长度为 n 的数组 a。你可以进行任意多次如下操作(也可以一次都不做):
- 选择下标 i,j(1≤i,j≤n)和位编号 b(b≥0),将 ai 与 aj 的二进制表示中的第 b 位进行交换。
请你在若干次操作后,使
max(a)−min(a)
尽可能大,并输出这个最大值。
说明:
- 位从右向左编号,最低位为第 0 位;
- 可以认为任意数的二进制表示前面都有无限多个前导 0;
- 例如:4=1002 与 3=112
- 交换第 0 位后得到 1012=5 与 102=2;
- 交换第 2 位后得到 0002=0 与 1112=7。
这里,max(a) 表示数组 a 的最大元素,min(a) 表示数组 a 的最小元素。
输入格式
- 第一行一个整数 t(1≤t≤128),表示测试用例数量。
- 对于每个测试用例:
- 第一行一个整数 n(3≤n≤512);
- 第二行 n 个整数 a1,a2,…,an(0≤ai<1024)。
- 保证所有测试用例中 n 的总和不超过 512。
输出格式
对每个测试用例,输出一个整数,表示在允许操作下 max(a)−min(a) 的最大可能值。
输入输出样例
输入#1
4 3 1 0 1 4 5 5 5 5 5 1 2 3 4 5 7 20 85 100 41 76 49 36
输出#1
1 0 7 125
说明/提示
- 样例 1:不做操作已最优,答案 1−0=1。
- 样例 2:数组无法通过操作改变,答案 5−5=0。
- 样例 3:可选 i=2, j=5, b=1,数组变为 [1,0,3,4,7],之后无法再提升,答案 7−0=7。