题解 | 翻之

翻之

https://www.nowcoder.com/practice/98204dce2782410a822ac53c5025b88a

#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

int main() {
    // 读取矩阵的行数n和列数m
    int n, m;
    cin >> n >> m;
    
    // 定义n行的字符串向量,存储矩阵数据
    vector<string> matrix(n);
    for (int i = 0; i < n; ++i) {
        cin >> matrix[i];  // 逐行读取矩阵数据
    }
    
    // 哈希表:key是翻转模式字符串,value是该模式出现的次数
    unordered_map<string, int> pattern_counts;
    
    // 遍历每一列j
    for (int j = 0; j < m; ++j) {
        string pattern;  // 存储当前列的翻转模式
        
        // 遍历当前列的每一行i
        for (int i = 0; i < n; ++i) {
            // 如果当前元素是'0',则需要翻转该行(记为'1')
            if (matrix[i][j] == '0') {
                pattern.push_back('1');
            } 
            // 如果当前元素是'1',则不需要翻转该行(记为'0')
            else {
                pattern.push_back('0');
            }
        }
        
        // 将该列的翻转模式存入哈希表,并增加计数
        pattern_counts[pattern]++;
    }
    
    // 遍历哈希表,找出出现次数最多的翻转模式
    int max_cols = 0;
    for (const auto& pair : pattern_counts) {
        if (pair.second > max_cols) {
            max_cols = pair.second;  // 更新最大列数
        }
    }
    
    // 输出结果:最多能有多少列全为'1'
    cout << max_cols << endl;
    
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务