由于操作是整行翻转,发现对于不同的两列,只要存在一行的元素互不相同,那么不管怎么操作都永远无法让这两列的元素同时均为 。由此得出结论,只有完全相同的两列才有可能同时满足要求,因此要找数量最多的相同列。

#include <bits/stdc++.h>
using namespace std;



void solve(){
    int n, m;
    cin >> n >> m;
    vector<string> s(m + 5);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            char c;
            cin >> c;
            s[j] += c;
        }
    }
    map<string, int> mp;
    int mx = 0;
    for (int i = 1; i <= m; i++) {
        mp[s[i]]++;
        mx = max(mp[s[i]], mx);
    }
    cout << mx;
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int _T = 1;
    // cin >> _T;
    while (_T--){ 
        solve();
    }
    return 0;
}