Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình tìm giá trị XOR tọa độ lớn thứ k trong Python


Mô tả bài toán

Cho ma trận m x n và giá trị k. Giá trị tại tọa độ (a, b) là XOR của tất cả matrix[i][j] với 0 <= i <= a, 0 <= j <= b. Tìm giá trị lớn thứ k (1-indexed) среди tất cả các tọa độ.

Ví dụ

Ma trận [[5,2],[1,6]], k = 1 -> đầu ra 7 (tọa độ (0,1): 5 XOR 2 = 7).

Giải thuật

  1. Tính prefix XOR theo hàng, rồi theo cột để có giá trị mỗi tọa độ.
  2. Duyệt các giá trị, dùng từ điển seen đếm tần suất.
  3. Giữ tối đa k giá trị lớn nhất: khi số lượng > k, loại bỏ giá trị nhỏ nhất.
  4. Trả về giá trị nhỏ nhất trong seen (là giá trị lớn thứ k).

Triển khai Python

def solve(matrix, k):
    m, n = len(matrix), len(matrix[0])
    for i in range(m):
        for j in range(n):
            if j:
                matrix[i][j] ^= matrix[i][j-1]
    seen = {}
    count = 0
    for i in range(n):
        for j in range(m):
            if j:
                matrix[j][i] ^= matrix[j-1][i]
            seen[matrix[j][i]] = seen.get(matrix[j][i], 0) + 1
            count += 1
            if count > k:
                min_value = min(seen)
                seen[min_value] -= 1
                if not seen[min_value]:
                    seen.pop(min_value)
    return min(seen)

matrix = [[5, 2], [1, 6]]
k = 1
print(solve(matrix, k))

Đầu vào

[[5,2],[1,6]], 1

Đầu ra

7