Из массива мне нужно найти значение, полученное посредством XOR-ing непрерывных подмассивов, следуя за XOR-ing полученных таким образом значений.XOR на смежных подмассивах массива
ВХОД
Одна строка, содержащая целые числа, которые являются элементами массива.
например. [1,2,3]
ВЫВОД
печати ответ, соответствующий каждого теста в отдельной строке.
До сих пор мне удалось создать две стратегии, используя циклы и рекурсивный подход. Ни один из моих подходов не дает хорошей производительности при большом размере ввода.
например. 1 XOR 2 XOR 3 XOR (1 XOR 2) XOR (2 XOR 3) XOR (1 XOR 2 XOR 3) = 2
Не могли бы вы построить лучший алгоритм? Может быть, подход с динамическим программированием?
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)))
Пожалуйста, измените пример, если значения в массиве могут быть произвольными, например, '[13, 42, 4711]'. – greybeard