【问题标题】:MAXIMUM AND VALUE [closed]最大和价值[关闭]
【发布时间】:2020-05-07 04:29:17
【问题描述】:

给定一个正整数 N 和一个从 L 到 R 的正整数范围。在具有最大位与 N 值的范围内找到最小的正整数。

注意:N 不必一定在 L 到 R 的范围内。

【问题讨论】:

  • 这是家庭作业吗?到目前为止,您尝试过什么?
  • lmao 你为什么只是想弄清楚这个特别的事情,是的@MaximKosov 这是正在进行的比赛的一部分。最好的办法是弄清楚自己。

标签: algorithm math mathematical-optimization bitwise-operators bitwise-and


【解决方案1】:

让我们现在假设答案为零0。取 N 的二进制表示。从最高有效位 (MSB) 到最低有效位 (LSB),一一对应。如果您收到0,请跳过。如果您得到1,则将其与答案按位或(将1 保持在同一位置)并查看答案是否在从L 到R 的范围内。如果Answer 小于等于R(假设R 包含在内),保持位为1(即使它小于L)。如果Answer 大于R,则将该位恢复为0 并转到N 中的下一位。

示例 1: N = 10 十进制,1010 二进制。 L = 5。 R = 15。 Answer = 0。 我们从N 的MSB 1 开始。

Answer OR 1000= 1000 二进制在LR 之间。我们保留它并移至N 中的下一位。

下一位是0。我们什么都不做,继续下一步。

下一位是1Answer0010 = 1010,介于 LR 之间。我们保留它并继续前进。

下一位是0。我们什么都不做。我们在N 的末尾。我们有答案。

Answer = 1010.

示例 2:N = 45 (101101),L = 32,R = 36。

Answer100000 = 100000 是 32,介于 LR 之间。我们将其保留为1 并继续。

Answer1000 = 101000 这是 40。大于 R。我们将回复回复到100000 并继续。

Answer100 = 100100 这是 36。这是 R。另一个优化:我们可以在此停止,因为与 Answer 进行或运算现在将增加其值超过 R

可以进行更多优化,例如如果NR 相等,则R 应该是答案。

在某些情况下,答案可能是0(例如N = 45、L = 16、R = 16)。可以根据问题的具体情况以L 作为答案。

【讨论】:

  • 但它会最小吗?
  • 除了上面的答案,AND-ing 111415N 会给你10 的最大值。由于我们没有在N 具有0 的位置上设置位,因此我们不会不必要地增加 answer 的值。就像我们可以在第二步放置一个1 也可以得到最大的按位值与N,但这将与N 中的0 进行AND 运算(如果那是字?)。我们正在避免这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 2012-09-14
  • 2017-07-29
相关资源
最近更新 更多