Từ một mảng, tôi cần phải tìm giá trị thu được bằng XOR-ing các mảng con tiếp giáp, sau đó XOR-ing các giá trị do đó thu được.XOR trên các mảng con tiếp giáp của một mảng
ĐẦU VÀO
Một dòng chứa số nguyên đó là những yếu tố của mảng.
ví dụ: [1,2,3]
OUTPUT
In câu trả lời tương ứng với mỗi trường hợp thử nghiệm ở một dòng riêng biệt.
Cho đến nay, tôi đã xây dựng hai chiến lược sử dụng vòng lặp và phương pháp đệ quy. Không có cách tiếp cận nào của tôi có hiệu suất tốt với kích thước đầu vào lớn.
ví dụ: 1 XOR 2 XOR 3 XOR (1 XOR 2) XOR (2 XOR 3) XOR (1 XOR 2 XOR 3) = 2
Bạn có thể xây dựng một thuật toán tốt hơn không? Có lẽ một phương pháp lập trình năng động?
from functools import reduce
# Calculate the XOR
def XOR(L):
return reduce(lambda x, y: x^y, L)
# Recursive approach
def allSubArraysXOR(L,L2=None):
if L2==None:
L2 = L[:-1]
if L==[]:
if L2==[]:
return 0
return allSubArraysXOR(L2,L2[:-1])
return XOR(L)^allSubArraysXOR(L[1:],L2)
# Loop - yielding approach
def getAllWindows(L):
for w in range(1, len(L)+1):
for i in range(len(L)-w+1):
yield XOR(L[i:i+w])
a = [int(a_temp) for a_temp in input().strip().split(' ')]
print(allSubArraysXOR(a))
# print(XOR(getAllWindows(a)))
Vui lòng thay đổi ví dụ nếu các giá trị trong mảng có thể tùy ý, ví dụ '[13, 42, 4711]'. – greybeard