竞争编码 - 掩码位 - 十进制到二进制
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)
我正在尝试解决竞争性编码问题。除了一个,我设法通过了所有测试用例。我猜我错过了某种边缘情况。
问题:
给定一个十进制数作为输入,将其转换为二进制并将该数的二进制形式中指定位置(输入中给定)的位更改为 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)