/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 34ms 788.0 KiB
#3 Accepted 34ms 856.0 KiB
#4 Accepted 51ms 756.0 KiB
#5 Accepted 34ms 840.0 KiB
#6 Accepted 34ms 788.0 KiB
#7 Accepted 33ms 844.0 KiB
#8 Accepted 36ms 1.016 MiB
#9 Accepted 35ms 856.0 KiB
#10 Accepted 32ms 788.0 KiB
#11 Accepted 34ms 840.0 KiB
#12 Accepted 52ms 808.0 KiB
#13 Accepted 33ms 788.0 KiB
#14 Accepted 34ms 836.0 KiB
#15 Accepted 38ms 844.0 KiB
#16 Accepted 62ms 808.0 KiB
#17 Accepted 33ms 788.0 KiB
#18 Accepted 35ms 840.0 KiB
#19 Accepted 52ms 1020.0 KiB
#20 Accepted 34ms 828.0 KiB
#21 Accepted 36ms 788.0 KiB
#22 Accepted 43ms 3.008 MiB
#23 Accepted 34ms 2.578 MiB
#24 Accepted 39ms 3.09 MiB
#25 Accepted 33ms 2.477 MiB
#26 Accepted 43ms 3.098 MiB
#27 Accepted 40ms 3.172 MiB
#28 Accepted 57ms 2.5 MiB
#29 Accepted 39ms 3.066 MiB
#30 Accepted 35ms 3.02 MiB
#31 Accepted 63ms 3.113 MiB
#32 Accepted 30ms 1.816 MiB
#33 Accepted 31ms 1.77 MiB
#34 Accepted 31ms 1.816 MiB
#35 Accepted 30ms 1.816 MiB
#36 Accepted 31ms 1.824 MiB
#37 Accepted 95ms 10.324 MiB
#38 Accepted 97ms 10.363 MiB
#39 Accepted 103ms 10.34 MiB
#40 Accepted 96ms 10.363 MiB
#41 Accepted 96ms 10.363 MiB
#42 Accepted 28ms 4.77 MiB
#43 Accepted 29ms 4.609 MiB
#44 Accepted 29ms 4.77 MiB
#45 Accepted 32ms 4.02 MiB
#46 Accepted 29ms 4.02 MiB
#47 Accepted 29ms 4.02 MiB
#48 Accepted 28ms 3.816 MiB
#49 Accepted 28ms 4.02 MiB
#50 Accepted 27ms 3.824 MiB

Code

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

#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);
using ll = long long;

int main() {
  FAST;
  
  int tc = 1, ti;
  cin >> tc;

  for (ti = 1; ti <= tc; ++ti) {
    ll n, m, i, j, k, ans, curr;
    cin >> n >> m;

    vector<string> a(n);
    for (i = 0; i < n; ++i) cin >> a[i];

    vector<vector<ll>> pf(n, vector<ll>(m));
    vector<vector<ll>> sf(n, vector<ll>(m));
    for (j = 0; j < m; ++j) {
      pf[0][j] = 1;
      for (i = 1; i < n; ++i) {
        if (a[i][j] == a[i-1][j]) pf[i][j] = pf[i-1][j] + 1;
          else pf[i][j] = 1;
      }
      for (i = 1; i < n; ++i) pf[i][j] = max(pf[i][j], pf[i-1][j]);

      sf[n-1][j] = 1;
      for (i = n-2; i >= 0; --i) {
        if (a[i][j] == a[i+1][j]) sf[i][j] = sf[i+1][j] + 1;
          else sf[i][j] = 1;
      }
      for (i = n-2; i >= 0; --i) sf[i][j] = max(sf[i][j], sf[i+1][j]);
    }

    ans = 0;
    for (j = 0; j < m; ++j) ans += pf[n-1][j];

    for (i = 0; i < n-1; ++i) {
      curr = 0;
      for (j = 0; j < m; ++j) curr += max(pf[n-1][j], pf[i][j] + sf[i+1][j]);
      ans = max(ans, curr);
    }

    vector<vector<ll>> L(m, vector<ll>(26, 0));
    vector<vector<ll>> R(m, vector<ll>(26, 0));
    for (i = 0; i < n; ++i) {
      for (j = 0; j < m; ++j) {
        for (k = 0; k < 26; ++k) {
          if (a[i][j] == (char)'a'+k) R[j][k] += 1;
        }
      }
    }

    ans = 0;
    for (j = 0; j < m; ++j) {
      ans += *max_element(R[j].begin(), R[j].end());
    }

    for (i = 0; i < n; ++i) {
      for (j = 0; j < m; ++j) {
        for (k = 0; k < 26; ++k) {
          if (a[i][j] == (char)'a'+k) {
            L[j][k] += 1;
            R[j][k] -= 1;
          }
        }
      }
      curr = 0;
      for (j = 0; j < m; ++j) {
        curr += *max_element(L[j].begin(), L[j].end());
        curr += *max_element(R[j].begin(), R[j].end());
      }
      ans = max(ans, curr);
    }

    cout << ans << "\n";
  }

  return 0;
}

Information

Submit By
Type
Submission
Problem
P1164 Simple character matching game
Contest
Brain Booster #8
Language
C++17 (G++ 13.2.0)
Submit At
2025-02-17 16:37:40
Judged At
2025-02-17 16:37:40
Judged By
Score
100
Total Time
103ms
Peak Memory
10.363 MiB