HJ136 翻之

知识点哈希

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

对于给定的 nn 行 mm 列的矩阵,每一个元素要么是 '0''0',要么是 '1''1'。

每一轮,你可以进行一次以下操作:

∙ ∙选择一行的元素,将其全部反置,即 '0''0' 变为 '1''1','1''1' 变为 '0''0'。

请你帮助小歪判断,若能进行任意多轮操作(也可以不进行操作),至多能使得多少列的元素均为 '1''1'。你只需要输出这个最大值。

输入描述:

第一行输入两个正整数 n,m(1≦n,m≦3×103)n,m(1≦n,m≦3×103) 代表矩阵的行数和列数。

此后 nn 行,每行输入一个长度为 mm 、仅由 '0''0' 和 '1''1' 构成的字符串,代表矩阵每一行中的元素。

输出描述:

输出一个整数,表示至多能使得多少列的元素均为 '1''1'。

示例1

输入:

复制代码
3 4
1111
1111
1111

复制输出:

复制代码
4

复制说明:

复制代码
在这个样例中,不需要进行操作,所有列的元素均为 ‘1’‘1’。

示例2

输入:

复制代码
3 2
01
10
11

复制输出:

复制代码
1

复制说明:

复制代码
在这个样例中,我们可以选择对第一行进行操作,使得第一行变为 "10""10",此时,第一列的元素均为 ‘1’‘1’。
cpp 复制代码
// 遍历每一列,每一列的字符组成一个字符串,相同的字符串可以在变换的情况下是的全为 1
// 不同的字符串不可能通过变换使得全为 1  ( 能发现这一点就好了 )
#include<bits/stdc++.h>
using namespace std;
const int N=3e3+6;
unordered_map<string,int> unmp;
int n,m;
string str[N];
int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>str[i];
    }
    for(int i=0;i<m;i++){
        string s="";
        for(int j=0;j<n;j++){
            s+=str[j][i];
        }
        unmp[s]++;
    }
    int ans=0;
    for(auto &[k,v]:unmp){
        ans=max(ans,v);
    }
    cout<<ans;

    return 0;
}
相关推荐
别动我齐刘海1 分钟前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
171320330计算机毕设编程1 分钟前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
姜鱼问生14 分钟前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构
不会就选b19 分钟前
算法日常・每日刷题--<动态规划>23
算法·动态规划
GreatSQL社区40 分钟前
主从复制SQL线程中断——字符集砸出的坑
java·数据库·算法
ZZHow10241 小时前
Ascend C算子开发(高级)笔记
c++·人工智能·笔记·深度学习·华为云
Tisfy2 小时前
LeetCode 2333.最小差值平方和:排序 + 数学计算(不用二分)
数学·算法·leetcode·题解·贪心·排序
aqiu1111112 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
lojox2 小时前
深入理解 C++ STL:vector 底层实现、迭代器失效与 list 特性
开发语言·c++
微笑星河q3 小时前
C++类和对象(下)初始化列表、类型转换、static、友元、内部类、匿名对象
开发语言·c++