题解 | 翻之
翻之
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; }