小美拿到了一个的矩阵,其中每个元素是 0 或者 1。
小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。
现在,小美希望你回答有多少个的完美矩形区域。你需要回答的所有答案。
第一行输入一个正整数,代表矩阵大小。
接下来的行,每行输入一个长度为的 01 串,用来表示矩阵。
输出行,第行输出的完美矩形区域的数量。
4 1010 0101 1100 0011
0 7 0 1
def count_perfect_matrices(matrix, n): prefix_diff = [[0] * (n + 1) for _ in range(n + 1)] for i in range(1, n + 1): for j in range(1, n + 1): current_val = 1 if matrix[i - 1][j - 1] == '1' else -1 prefix_diff[i][j] = (prefix_diff[i - 1][j] + prefix_diff[i][j - 1] - prefix_diff[i - 1][j - 1] + current_val) results = [] for size in range(1, n + 1): perfect_count = 0 for i in range(size, n + 1): for j in range(size, n + 1): total_diff = (prefix_diff[i][j] - prefix_diff[i - size][j] - prefix_diff[i][j - size] + prefix_diff[i - size][j - size]) if total_diff == 0: perfect_count += 1 results.append(perfect_count) return results n = int(input().strip()) matrix = [input().strip() for _ in range(n)] result = count_perfect_matrices(matrix, n) for count in result: print(count)将0处理为-1,直接前缀和计算