1. 问题描述:
给定一个 n × n 的 01 矩阵。你可以选择若干列(也可以不选),并将这些列上的所有元素进行变换(1 变 0,0 变 1)。你的目标是使得矩阵中有尽可能多的行满足:一行中的所有元素都为 1。输出可以得到的满足条件的行的最大数量。
输入格式
第一行包含整数 n。接下来 n 行,每行包含一个长度为 n 的 01 字符串,表示整个矩阵。
输出格式
输出可以得到的满足条件的行的最大数量。
数据范围
1 ≤ n ≤ 100
输入样例1:
4
0101
1000
1111
0101
输出样例1:
2
输入样例2:
3
111
111
111
输出样例2:
3
来源:https://www.acwing.com/problem/content/description/3817/
2. 思路分析:
分析题目可以知道如果两行元素相同那么他们的相等关系是一样的,所以对于矩阵中的所有行存在若干个等价类,我们只需要找到等价类中最大的出现次数即可,让其变为1即可。将每一行看成是一个字符串使用哈希表统计每一行出现的次数,找到最大的出现次数即可。
3. 代码如下:
class Solution:
def process(self):
n = int(input())
g = list()
mp = dict()
for i in range(n):
s = input()
if s not in mp: mp[s] = 1
else: mp[s] += 1
res = 0
for k, v in mp.items():
res = max(res, v)
return res
if __name__ == '__main__':
print(Solution().process())