【发布时间】:2023-03-14 07:33:01
【问题描述】:
给定 N 个整数区间 [lo_i,hi_i]。
从每个区间中选择一个数字,使得它们的按位或成为给定数字 X。(结果是否比 X 多 1 位无关紧要;即,如果生成的数字是 Y,(X&Y)==X应该持有)
【问题讨论】:
-
所有时间间隔只有一个
X? -
为每个区间选择一个 Y,这样
X|Y == X?如果区间内没有Y这样的数字怎么办?我在想[8, 9]和X = 6 -
你能举个例子吗?像这样?当
X == 15,从[13,14]和[1,2],你选择14和1,这样(14 | 1) & X == X。 -
通过蛮力很容易做到,但速度慢得离谱(现在只取决于 N,但范围的大小也是如此) - 我假设你想要一些合理的东西?我已经查看了许多二分匹配和设置覆盖问题,但我认为没有办法正确地做到这一点。我能想到的最好的办法是稍微修剪一下蛮力(例如,如果某个位仅出现在一个区间的上半部分,则必须从该区间的上半部分选择一个数字)。
-
xor 已经有这个属性
(a xor b) xor b = a
标签: algorithm bit-manipulation