我正在尝试解决竞争性编码问题。我设法通过了除一个以外的所有测试用例。我想我错过了某种边缘情况。
问题:
给出一个十进制数字作为输入,将其转换为二进制,然后将数字的二进制形式的指定位置(在输入中给出)的位更改为0。以十进制形式输出结果二进制数字。
这是我的代码:
import math
for _ in range(int(input())):
n = int(input()) #The given number
a = list(map(int, input().split())) #Positions at which the bits need to be masked
b = str(bin(n))[:1:-1]
for i in a:
if i<=len(b) and b[i-1]=='1':
n-=math.pow(2, i-1)
print(int(n))
如果有人可以告诉我我可能错过的可能的极端情况,那就太好了。我找不到关于此问题的任何讨论,也不允许我看到其他人的解决方案。任何帮助表示赞赏。谢谢。
答案 0 :(得分:1)
假设您在注释中提到的条件适用于测试数据,那么我找不到您的代码无法正确处理的任何极端情况。但是,这是使用按位运算的算法的更有效版本。不仅速度更快,而且还可以处理位掩码列表中的零(尽管这不成问题)。
for _ in range(int(input())):
# The given number
n = int(input())
# Create the bit mask
mask = sum(1 << int(u) for u in input().split()) >> 1
# Invert the bits in n which are also in mask
n ^= n & mask
print(n)