#P17091. 张力

张力

1003. 张力

题目描述

胖胖龙正在研究一种数字排列艺术。他认为,对于任意两个非负整数 x, y,将它们相邻放置时会产生大小为 lowbit(x ⊕ y) 的“张力”。现在,胖胖龙有一个长度为 n 的非负整数序列 a1, a2, …, an。他希望

将这些数重新排列成 b1, b2, …, bn,使得相邻数字之间的总张力最

小,即最小化:n−1

∑ lowbit(bi ⊕ bi+1 )

i=1

其中 ⊕ 表示按位异或。对于正整数 x,lowbit(x) 表示 x 二进制表示下最低位的 1 对应的数值,例如 lowbit(12) = 4。特别地,我们定义 lowbit(0) = 0。请你帮帮胖胖龙,求出最小可能的总张力。

输入格式

每个测试点中包含多组测试数据。输入的第一行包含一个正整数 T (

1 ≤ T ≤ 100),表示数据组数。对于每组测试数据:第一行一个正整数 n (1 ≤ n ≤ 5 × 103 ),表示序列的长度。第二行 n 个整数 a1, a2, …, an (0 ≤ ai < 250 ),表示序列 a。

保证所有测试数据中 n 之和不超过 2 × 104。

输出格式

对于每组测试数据:输出一行一个整数,表示最小可能的总张力。

样例输入

3
3
0 1 2
5
3 4 5 6 7
8
1 8 2 0 12 1 4 2

样例输出

2
4
8

来源:官方题面 PDF(2026"钉耙编程"暑期联赛 第2场)