Giả sử chúng ta có một ma trận m x n. và một giá trị khác k. Ở đây giá trị của tọa độ (a, b) của ma trận là XOR của tất cả ma trận [i, j] trong đó i trong phạm vi (0 đến a) và j trong phạm vi (0 đến b). Chúng ta phải tìm giá trị lớn nhất thứ k (được lập chỉ mục 1) của tất cả các tọa độ của ma trận.
Vì vậy, nếu đầu vào giống như
5 | 2 |
1 | 6 |
Và k =1, thì đầu ra sẽ là 7 vì giá trị của tọa độ (0,1) là 5 XOR 2 =7 và đây là giá trị lớn nhất
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- m:=số hàng, n:=số cột
- đối với tôi trong phạm vi từ 0 đến m - 1, thực hiện
- đối với j trong phạm vi từ 0 đến n - 1, thực hiện
- nếu j khác 0, thì
- ma trận [i, j]:=matrix [i, j] Ma trận XOR [i, j-1]
- nếu j khác 0, thì
- đối với j trong phạm vi từ 0 đến n - 1, thực hiện
- đã thấy:=một bản đồ mới
- số lượng:=0
- đối với tôi trong phạm vi từ 0 đến n - 1, thực hiện
- đối với j trong phạm vi từ 0 đến m - 1, thực hiện
- nếu j khác 0, thì
- matrix [j, i]:=matrix [j, i] XOR matrix [j-1, i]
- saw [matrix [j, i]] =(1 + saw [matrix [j, i]] nếu có thể, nếu không thì 1)
- count:=count + 1
- nếu đếm> k, thì
- min_value:=tối thiểu được xem
- đã thấy [min_value]:=đã thấy [min_value] - 1
- nếu thấy [min_value] là 0, thì
- xóa phần tử min_value-th để xem
- nếu j khác 0, thì
- đối với j trong phạm vi từ 0 đến m - 1, thực hiện
- trả lại số tiền tối thiểu đã thấy
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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