Mô tả bài toán
Cho mảng enc. Mảng perm là hoán vị của n số nguyên dương đầu tiên (n lẻ). Mã hóa: enc[i] = perm[i] XOR perm[i+1]. Khôi phục perm.
Ví dụ
enc = [2,5,6,3] -> perm = [7, 5, 0, 6, 5].
Giải thuật
- Tính
x = XOR(1..n+1)(vìpermlà hoán vị 1..n+1). result[0] = x XOR (enc[1] XOR enc[3] XOR ...)(XOR các vị trí lẻ củaenc).- Khôi phục lần lượt:
result[i] = result[i-1] XOR enc[i-1].
Triển khai Python
def solve(enc):
n = len(enc)
result = [0] * (n + 1)
x = 0
for i in range(1, n + 2):
x ^= i
result[0] = x
for i in range(1, n + 1, 2):
result[0] ^= enc[i]
for i in range(1, n + 1):
result[i] = result[i-1] ^ enc[i-1]
return result
enc = [2, 5, 6, 3]
print(solve(enc))
Đầu vào
[2,5,6,3]
Đầu ra
[7, 5, 0, 6, 5]