ปัญหา
ให้จำนวน x, y และช่วงบิต left ถึง right (นับจากขวา เริ่ม 1) ตรวจสอบว่าบิตในช่วงนี้เป็นคอมพลีเมนต์กัน (0↔1) หรือไม่
ตัวอย่าง
x = 41 (101001₂), y = 54 (110110₂), left=2, right=5
บิต 2-5 ของ x: 1001, ของ y: 0110 → คอมพลีเมนต์กัน → True
ทฤษฎี
บิตคอมพลีเมนต์กัน ⟺ x XOR y มีบิต 1 ทั้งหมดในช่วงนั้น
โค้ดตัวอย่าง
def all_bits_set_in_range(n, left, right):
# สร้างมาสก์บิต 1 ในช่วง left-right
mask = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1)
return (n & mask) == mask
def solve(x, y, left, right):
return all_bits_set_in_range(x ^ y, left, right)
print(solve(41, 54, 2, 5)) # True
อินพุต / เอาต์พุต
Input: 41, 54, 2, 5 Output: True