竞争编码 - 掩码位 - 十进制到二进制

Competitive Coding - Mask bits - Decimal to Binary

我正在尝试解决竞争性编码问题。除了一个,我设法通过了所有测试用例。我猜我错过了某种边缘情况。

问题:

给定一个十进制数作为输入,将其转换为二进制并将该数的二进制形式中指定位置(输入中给定)的位更改为 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))

如果有人能说出我可能错过的可能的边缘情况,那就太好了。我找不到关于这个问题的任何讨论,也不允许我看到其他人的解决方案。任何帮助表示赞赏。谢谢

假设您在评论中提到的条件适用于测试数据,我找不到您的代码无法正确处理的任何极端情况。但这里有一个更有效的算法版本,使用按位运算。它不仅速度更快,而且还能处理位掩码列表中为零的情况,尽管这应该不是问题。

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)