#CF1926D. Vlad and Division

    ID: 6881 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>位运算贪心CodeforcesCodeforces Round 928(Div4)Div4DCF1926D1300

Vlad and Division

题目描述

Vladislav 有 nn 个非负整数,他想将这些数分成若干组,使得在每一组中,任意一对数在第 11 位到第 3131 位(即二进制表示的最低 3131 位)上都没有相同的比特值。

对于一个整数 kk,记 k2(i)k_2(i) 表示其二进制表示中从右往左第 ii 位(从 11 开始编号)。例如,若 k=43k=43,因为 43=101011243=101011_2,则 432(1)=143_2(1)=1432(2)=143_2(2)=1432(3)=043_2(3)=0432(4)=143_2(4)=1432(5)=043_2(5)=0432(6)=143_2(6)=1432(7)=043_2(7)=0432(8)=043_2(8)=0\dots432(31)=043_2(31)=0

形式化地说,对于同一组内的任意两个数 xxyy,都必须满足对于所有 1i<321 \leq i < 32,都有 x2(i)y2(i)x_2(i) \ne y_2(i)

Vlad 需要的最小分组数是多少?每个数必须恰好属于一个组。

输入格式

第一行包含一个整数 tt1t1041 \leq t \leq 10^4),表示测试用例的数量。

每个测试用例的第一行包含一个整数 nn1n21051 \leq n \leq 2 \cdot 10^5),表示整数的数量。

每个测试用例的第二行包含 nn 个整数 a1,,ana_1, \ldots, a_n0aj<2310 \leq a_j < 2^{31})。

所有测试用例中 nn 的总和不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,输出一个整数,表示满足条件所需的最小分组数。

样例

9
4
1 4 3 4
2
0 2147483647
5
476319172 261956880 2136179468 1671164475 1885526767
3
1335890506 811593141 1128223362
4
688873446 627404104 1520079543 1458610201
4
61545621 2085938026 1269342732 1430258575
4
0 0 2147483647 2147483647
3
0 0 2147483647
8
1858058912 289424735 1858058912 2024818580 1858058912 289424735 122665067 289424735
4
1
3
2
2
3
2
2
4

样例说明

在第一个测试用例中,任意两个数的最后 3131 位都相同,因此需要将每个数单独分组。

在第二个测试用例中,a1=00000000000000000000000000000002a_1=0000000000000000000000000000000_2a2=11111111111111111111111111111112a_2=1111111111111111111111111111111_2,它们可以放在同一组,因为对于每个 1i311 \leq i \leq 31,都有 a1(i)a2(i)a_1(i) \ne a_2(i)

由 ChatGPT 4.1 翻译

来源

Codeforces 1926D,英文题名 Vlad and Division。