给出$a_1, a_2, \dots, a_n$共计n个数,$(0 \le a_i \le 2^{30}-1)$。
请选择一个X,使得$\underset{1 \leq i \leq n}{\max} (a_i \oplus X)$最小化。
请输出最小的$\underset{1 \leq i \leq n}{\max} (a_i \oplus X)$
">Dr. Evil Underscores
Dr. Evil Underscores
Created by LXC on Sun Jul 9 14:12:21 2023
https://codeforces.com/problemset/problem/1285/D
ranting: 1900
tag: bitmasks, brute force, dfs and similar, divide and conquer, dp, greedy, strings, trees
problem
给出$a_1, a_2, \dots, a_n$共计n个数,$(0 \le a_i \le 2^{30}-1)$。
请选择一个X,使得$\underset{1 \leq i \leq n}{\max} (a_i \oplus X)$最小化。
请输出最小的$\underset{1 \leq i \leq n}{\max} (a_i \oplus X)$
solution
先看所有数的最高位,如果既有1又有0,那么答案的最高位必定是1;否则必为0。
我们将最高位按照1和0分为两组,进一步判断次高位。我们发现每个问题可以最多划分成两个子问题,子问题不重叠,可以直接递归分而治之。
每递归一层可以构造一位答案,当递归了30层后便可得到一个答案。取所有构造答案的最小值即可。
code
1 |
|