首页 > 试题广场 >

翻之

[编程题]翻之
  • 热度指数:3617 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1024M,其他语言2048M
  • 算法知识视频讲解
\hspace{15pt}对于给定的 nm 列的矩阵,每一个元素要么是 \texttt{`0'},要么是 \texttt{`1'}
\hspace{15pt}每一轮,你可以进行一次以下操作:
\hspace{23pt}\bullet\,选择一行的元素,将其全部反置,即 \texttt{`0'} 变为 \texttt{`1'}\texttt{`1'} 变为 \texttt{`0'}
\hspace{15pt}请你帮助小歪判断,若能进行任意多轮操作(也可以不进行操作),至多能使得多少列的元素均为 \texttt{`1'}。你只需要输出这个最大值。

输入描述:
\hspace{15pt}第一行输入两个正整数 n,m\left(1\leqq n,m\leqq 3 \times 10^3\right) 代表矩阵的行数和列数。
\hspace{15pt}此后 n 行,每行输入一个长度为 m 、仅由 \texttt{`0'}\texttt{`1'} 构成的字符串,代表矩阵每一行中的元素。


输出描述:
\hspace{15pt}输出一个整数,表示至多能使得多少列的元素均为 \texttt{`1'}
示例1

输入

3 4
1111
1111
1111

输出

4

说明

\hspace{15pt}在这个样例中,不需要进行操作,所有列的元素均为 \texttt{`1'}
示例2

输入

3 2
01
10
11

输出

1

说明

\hspace{15pt}在这个样例中,我们可以选择对第一行进行操作,使得第一行变为 \texttt{,此时,第一列的元素均为 \texttt{`1'}
头像 lhp_zml
发表于 2025-03-09 20:00:51
// 遍历每一列,每一列的字符组成一个字符串,相同的字符串可以在变换的情况下是的全为 1 // 不同的字符串不可能通过变换使得全为 1 ( 能发现这一点就好了 ) #include<bits/stdc++.h> using namespace std; const int N=3e3+ 展开全文
头像 CARLJOSEPHLEE
发表于 2025-03-04 15:34:37
import sys from collections import Counter n, m = map(int, sys.stdin.readline().split()) matrix = [sys.stdin.readline().strip() for _ in range(n)] co 展开全文
头像 陈zx
发表于 2025-03-05 04:09:35
n, m = map(int,input().split()) tatal_max = 1 arr=[] for i in range(0,n): arr.append(str(input())) columns = {} for j in range(m): col = ''.j 展开全文
头像 TRfirst
发表于 2025-10-18 10:50:27
由于操作是整行翻转,发现对于不同的两列,只要存在一行的元素互不相同,那么不管怎么操作都永远无法让这两列的元素同时均为 。由此得出结论,只有完全相同的两列才有可能同时满足要求,因此要找数量最多的相同列。 #include <bits/stdc++.h> using namespace st 展开全文
头像 594233
发表于 2025-07-14 23:18:24
深度优先+剪枝每一行无非翻或者不翻,把所有情况遍历只在沉底时,看结果是否满意(计算并更新每种情况最多1的个数)深度优先搜索:继续往左走继续往右走剪枝:计算当前统计结果中1的数目,如果为零,或已经小于存在过的结果,直接退出翻:二进制否运算统计1的数量:二进制与运算 import sys sys.se 展开全文
头像 牛客754921490号
发表于 2025-12-16 10:46:21
#include <iostream> #include <vector> #include <unordered_map> using namespace std; // 数据量很大,如果穷举必然超时完全没思路,翻了网友答案 // i,j列 如果构形完全相同 则 展开全文
头像 threeway
发表于 2025-10-18 19:45:21
#include <bits/stdc++.h> using namespace std; int main() { int n,m; cin>>n>>m; vector<string> s(n); for(int i 展开全文
头像 番禺小韭菜
发表于 2025-03-05 17:49:48
#include <iostream> #include <vector> #include <unordered_map> #include <string> #include <algorithm> using namespace s 展开全文
头像 Goldminer
发表于 2025-04-24 15:49:07
#include <iostream> #include <string> #include <vector> #include <unordered_map> using namespace std; int main() { // 读取 展开全文
头像 何成95
发表于 2025-06-06 20:23:56
关键在于对题目进行逻辑分析,根据分析可知:1、当两列元素或元素构成的字符串相同时,才能通过行元素反转颠倒变换,使得两列元素相同。2、题目寻找的最大相同列或最大相同列元素字符串数量。 n, m = map(int, input().split()) matrix = [input() for _ in 展开全文