编程题
### 问题描述 大衣有一个长度为 $N​$ 的数组 $A​$,满足 $2\times(A_1\oplus A_2\oplus\cdots \oplus A_N)\ge(A_1|A_2|\cdots|A_N)​$ 的条件。 大衣将进行接下来的操作: - 选取一个元素 $A_i$ 将它从数组中删除。 - 他可以拿一个空盒子装这个元素,也可以拿一个其中**所有元素异或和**的结果大于等于 $A_i​$ 的非空盒子来装这个元素。 大衣想知道他**最少**用几个盒子便能将数组 $A​$ 中的元素删完。 ### 输入格式 第一行输入一个正整数 $N$ 表示数组的大小。 第二行输入 $N$ 个整数 $A_1,A_2,\cdots,A_N$ 表示数组中的元素。 ### 输出格式 输出一个数字表示能将 $A$ 中元素删完所需的最少盒子数。 ### 样例输入1 ```text 1 6 ``` ### 样例输出1 ```text 1 ``` ### 样例输入2 ```text 4 1 2 3 12 ``` ### 样例输出2 ```text 1 ``` ### 样例输入3 ```text 3 6 5 4 ``` ### 样例输出3 ```text 2 ``` ### 说明 - 样例 $1$: - 从数组中选择数字 $6​$ 并将其删除,再将其添加到一个新盒子。 - 数组 $A​$ 已经空了并且我们用了一个盒子。 - 样例 $2​$: - 从数组中选择 $12$ 并将其删除,然后将其放入新的盒子中。盒子的异或和变为 $12​$。 - 从数组中选择 $3$ 并将其删除。由于盒子的异或和 $12 \ge3$,我们可以将 $3$ 加入盒子中,使盒子的异或和变为 $12\oplus3=15$。 - 从数组中选择 $2$ 并将其删除。由于盒子的异或和 $15\ge2$,我们可以将 $2$ 加入盒子中,使盒子的异或和变为 $15 \oplus2 = 13$。 - 从数组中选择 $1$ 并将其删除。由于盒子的异或和 $13\ge1$,我们可以将 $1$ 加入盒子中,使盒子的异或和变为 $13 \oplus 1 = 12$。 - 现在 $A​$ 数组为空,我们一共使用了一个盒子。 - 样例 $3$: - 从数组中选择 $5$ 并删除它。将 $5$ 添加到一个新的盒子中。盒子的异或和为 $5$。 - 从数组中选择 $4$ 并删除它。由于盒子的异或和 $5 > 4$,我们可以将 $4$ 添加到盒子中。盒子的异或和变为 $5 \oplus 4 = 1$。 - 从数组中选择 $6$ 并删除它。将 $6$ 添加到一个新的盒子中。第二个盒子的异或和为 $6$。 - 此时 $A​$ 数组为空,我们使用了两个盒子。 ### 评测数据规模 对于所有的评测数据,$1\le N\le 2\times10^5$,$1\le A_i\le10^{18}$。
查看答案
赣ICP备20007335号-2