/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 584.0 KiB
#2 Accepted 26ms 1.02 MiB
#3 Accepted 23ms 1.02 MiB
#4 Accepted 23ms 876.0 KiB
#5 Accepted 24ms 1.066 MiB
#6 Accepted 24ms 900.0 KiB
#7 Accepted 21ms 1.027 MiB
#8 Accepted 24ms 816.0 KiB
#9 Accepted 24ms 1.027 MiB
#10 Accepted 23ms 1016.0 KiB
#11 Accepted 23ms 796.0 KiB
#12 Accepted 23ms 848.0 KiB
#13 Accepted 24ms 1.043 MiB
#14 Accepted 24ms 796.0 KiB
#15 Accepted 24ms 988.0 KiB
#16 Accepted 23ms 1.027 MiB
#17 Accepted 22ms 868.0 KiB
#18 Accepted 30ms 888.0 KiB
#19 Accepted 24ms 1.027 MiB
#20 Accepted 24ms 1.027 MiB
#21 Accepted 24ms 880.0 KiB
#22 Accepted 34ms 3.629 MiB
#23 Accepted 23ms 3.27 MiB
#24 Accepted 30ms 3.609 MiB
#25 Accepted 23ms 3.074 MiB
#26 Accepted 33ms 3.641 MiB
#27 Accepted 30ms 3.68 MiB
#28 Accepted 23ms 2.863 MiB
#29 Accepted 28ms 3.574 MiB
#30 Accepted 27ms 3.605 MiB
#31 Accepted 28ms 3.523 MiB
#32 Accepted 12ms 1020.0 KiB
#33 Accepted 12ms 976.0 KiB
#34 Accepted 12ms 796.0 KiB
#35 Accepted 12ms 796.0 KiB
#36 Accepted 12ms 796.0 KiB
#37 Accepted 26ms 1.102 MiB
#38 Accepted 26ms 1.109 MiB
#39 Accepted 25ms 1.027 MiB
#40 Accepted 26ms 1.027 MiB
#41 Accepted 25ms 1.141 MiB
#42 Accepted 11ms 2.105 MiB
#43 Accepted 12ms 2.438 MiB
#44 Accepted 12ms 2.285 MiB
#45 Accepted 11ms 2.289 MiB
#46 Accepted 11ms 2.289 MiB
#47 Accepted 12ms 2.285 MiB
#48 Accepted 11ms 2.52 MiB
#49 Accepted 11ms 2.312 MiB
#50 Accepted 11ms 2.277 MiB

Code

#include <algorithm>
#include <bits/stdc++.h>
#include <numeric>

// #ifndef ONLINE_JUDGE
// #include "template.cpp"
// #else
// #define debug(...)
// #define debugArr(...)
// #endif

#define F first
#define S second
// #define int long long
#define double long double
#define eb emplace_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sz(x) (int)x.size()
#define mp(x, y) make_pair(x, y)
#define lb lower_bound
#define ub upper_bound
#define ins insert
#define INF (int)1e18
using namespace std;

using pii = pair<int, int>;
using pdd = pair<double, double>;
using pbb = pair<bool, bool>;
using pcc = pair<char, char>;
using pss = pair<string, string>;
using vi = vector<int>;
using vd = vector<double>;
using vb = vector<bool>;
using vc = vector<char>;
using vs = vector<string>;
using vpii = vector<pair<int, int>>;
using vpdd = vector<pair<double, double>>;
using vpbb = vector<pair<bool, bool>>;
using vpcc = vector<pair<char, char>>;
using vpss = vector<pair<string, string>>;
using vvi = vector<vector<int>>;
using vvd = vector<vector<double>>;
using vvb = vector<vector<bool>>;
using vvc = vector<vector<char>>;
using vvs = vector<vector<string>>;
using vvpii = vector<vector<pair<int, int>>>;
using vvpdd = vector<vector<pair<double, double>>>;
using vvpbb = vector<vector<pair<bool, bool>>>;
using vvpcc = vector<vector<pair<char, char>>>;
using vvpss = vector<vector<pair<string, string>>>;

// clang-format off
template <class T> using pq = priority_queue<T>;
template <class T> using pqg = priority_queue<T, vector<T>, greater<T>>;
template <class T> T sqrt_(T elem) {int l=1,r=elem;while(l<=r){int mid=l+(r-l)/2LL;if(mid>elem/mid){r=mid-1;}else{int val=mid*mid;if(val<=elem){l=mid+1;}else{r=mid-1;}}}return r;}
template <class T> T ceil_(T a,T b) {return(a+b-1)/b;};
template <class T> T mod_add(T a,T b,T mod){return((a%mod)+(b%mod))% mod;}
template <class T> T mod_sub(T a,T b,T mod){return((a%mod)-(b%mod)+mod)%mod;}
template <class T> T mod_mul(T a,T b,T mod){return((a%mod)*(b%mod))%mod;}
template <class T> T mod_inv(T a,T mod){T m0=mod,y=0,x=1;if(mod==1)return 0;while(a>1){T q=a/mod;T t=mod;mod=a%mod,a=t;t=y;y=x-q*y;x=t;}if(x<0)x+=m0;return x;}
template <class T> T mod_div(T a,T b,T mod){return mod_mul(a,mod_inv(b,mod),mod);}
// clang-format on
const int N = 26;
void solve() {
  int n, m;
  cin >> n >> m;

  vvc a(n + 1, vc(m + 1));

  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cin >> a[i][j];
    }
  }

  vvi pre(n + 1, vi(m + 1));
  vvi suff(n + 1, vi(m + 1));

  for (int j = 1; j <= m; j++) {
    vi freq(N);
    for (int i = 1; i <= n; i++) {
      freq[a[i][j] - 'a']++;
      pre[i][j] = *max_element(all(freq));
    }
  }

  for (int j = 1; j <= m; j++) {
    vi freq(N);
    for (int i = n; i >= 1; i--) {
      freq[a[i][j] - 'a']++;
      suff[i][j] = *max_element(all(freq));
    }
  }

  int ans = max(accumulate(all(pre[n]), 0LL), accumulate(all(suff[1]), 0LL));

  for (int i = 1; i < n; i++) {
    int v1 = accumulate(all(pre[i]), 0LL);
    int v2 = accumulate(all(suff[i + 1]), 0LL);
    ans = max(ans, v1 + v2);
  }
  cout << ans << '\n';
  return;
}

signed main() {

  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

  int tt = 1, count = 1;
  cin >> tt;
  while (tt--) {
    // cout << "Case #" << count << ": ";
    solve();
    ++count;
  }
  return 0;
}

Information

Submit By
Type
Submission
Problem
P1164 Simple character matching game
Language
C++17 (G++ 13.2.0)
Submit At
2025-04-06 14:44:18
Judged At
2025-04-06 14:44:18
Judged By
Score
100
Total Time
34ms
Peak Memory
3.68 MiB