Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm XOR tối đa cho mỗi truy vấn bằng Python

Giả sử chúng ta có một mảng được sắp xếp trước gọi là nums có kích thước n và cũng có một giá trị b. Chúng ta muốn thực hiện truy vấn sau n lần -

  • Tìm kiếm giá trị không âm k <2 ^ m sao cho XOR của tất cả các phần tử ở dạng num và k được tối đa hóa. Vậy k là câu trả lời cho truy vấn thứ i.

  • Xóa phần tử cuối cùng khỏi số mảng hiện tại.

  • Chúng ta phải tìm một câu trả lời mảng, trong đó answer [i] là câu trả lời cho truy vấn thứ i.

Vì vậy, nếu đầu vào giống như nums =[0,1,1,3], m =2, thì đầu ra sẽ là [0,3,2,3], bởi vì

  • nums =[0,1,1,3], k =0 vì 0 XOR 1 XOR 1 XOR 3 XOR 0 =3.

  • nums =[0,1,1], k =3 vì 0 XOR 1 XOR 1 XOR 3 =3.

  • nums =[0,1], k =2 vì 0 XOR 1 XOR 2 =3.

  • nums =[0], k =3 vì 0 XOR 3 =3.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • x:=2 ^ m - 1

  • đối với tôi trong phạm vi từ 0 đến kích thước của nums - 1, thực hiện

    • nums [i]:=nums [i] XOR x

    • x:=nums [i]

  • trả về số sau khi đảo ngược

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

def solve(nums, m):
   x=2**m-1
   for i in range(len(nums)):
      nums[i]^= x
      x = nums[i]
   return(nums[::-1])

nums = [0,1,1,3]
m = 2
print(solve(nums, m))

Đầu vào

[0,1,1,3], 2

Đầu ra

[0, 3, 2, 3]