、

P10218 [省选联考 2024] 魔法手杖

题意

给出 \(n,m,k,\{ a_n\},\{ b_n \}\) 满足 \(a_i\in [0,2^k-1]\)。可以选择一个集合 \(S\in \{ 1, \ldots n \}:=U\) 满足 \(\sum_{i\in S}b_i\le m\) 和一个 \(x\in [0,2^k-1]\),找到以下的最大值:

\[\min\big(\min_{i\in S}(a_i+x),\min_{i\in U\backslash S}(a_i\oplus x)\big) \]

思路

首先因为 \(a\oplus b=a+b-(a|b)\),所以 \(a\oplus b\le a+b\)。那么除非是所有 \(b\) 之和都小于等于 \(m\) 的情况可以提前判掉,剩下的受异或的影响所以答案就至多只有 \(k\) 位。

那么对于有位运算限制又要求最大值可以考虑逐位确定答案这一位是否可以为 \(1\)。同时,在确认答案时我们也可以同时确认 \(x\) 的值,因为位运算的好处就是不会前后影响。

看到这种限制可以考虑字典树,将所有 \(a\) 插入后考虑当前的 \(x\) 在一个位置上。如果 \(x=0\),那么为了使答案为 \(1\) 则所有左子树就都需要加入 \(S\) 中,字典树维护一下权值和,然后也要维护一个最小值来判断是否可以满足 \(a+x\) 的形式,之后递归右子树即可。那么 \(x=1\) 也是同理的。

之后如果都不行就只能这一位为 \(0\) 去递归两个子树。

复杂度 \(\mathcal{O}(nk)\)。

posted @ 2026-09-30 20:22  tanghg  阅读(6)  评论(0)    收藏  举报