/ SeriousOJ /

Record Detail

Time Exceeded


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 1ms 348.0 KiB
#3 Accepted 3ms 648.0 KiB
#4 Accepted 5ms 592.0 KiB
#5 Accepted 36ms 580.0 KiB
#6 Accepted 53ms 720.0 KiB
#7 Accepted 59ms 532.0 KiB
#8 Accepted 104ms 792.0 KiB
#9 Accepted 245ms 788.0 KiB
#10 Accepted 62ms 620.0 KiB
#11 Accepted 183ms 532.0 KiB
#12 Time Exceeded ≥1099ms ≥2.066 MiB
#13 Accepted 133ms 532.0 KiB
#14 Accepted 125ms 680.0 KiB
#15 Accepted 311ms 788.0 KiB
#16 Accepted 518ms 1.016 MiB
#17 Accepted 722ms 1.02 MiB
#18 Accepted 5ms 532.0 KiB

Code

#include <bits/stdc++.h>

using namespace std;

int get(char a, char b, char c) {
  int ret = 0;
  if (a != 'a') ret += 'z' - a + 1;
  if (b <= 'b') ret += 'b' - b;
  else ret += 'z' - b + 2;
  if (c <= 'c') ret += 'c' - c;
  else ret += 'z' - c + 3;
  return ret;
}

void solve(int cs) {
  int n, k;
  cin >> n >> k;
  string s;
  cin >> s;
  k = min(k, n * 20);
  vector<vector<int>> dp(4, vector<int>(k + 1, 0));
  int ans = 0;
  for (int i = 2; i < n; i++) {
    for (int j = 0; j <= k; j++) {
      int ni = i % 4;
      int ops = get(s[i - 2], s[i - 1], s[i]);
      if (j) dp[ni][j] = max(dp[ni][j], dp[ni][j - 1]);
      dp[ni][j] = max(dp[ni][j], dp[(ni - 1 + 4) % 4][j]);
      if (j >= ops) {
        if (i == 2) dp[ni][j] = max(dp[ni][j], 1);
        else {
          dp[ni][j] = max(dp[ni][j], dp[(ni - 3 + 4) % 4][j - ops] + 1);
        }
      }
      ans = max(ans, dp[ni][j]);
    }
  }
  cout << ans << "\n";
}

int32_t main() {
  cin.tie(0) -> sync_with_stdio(0);
  int t = 1;
  cin >> t;
  for (int i = 1; i <= t; i++) {
    solve(i);
  }
  return 0;
}

Information

Submit By
Type
Submission
Problem
P1100 Substring ABC
Language
C++17 (G++ 13.2.0)
Submit At
2025-06-19 20:37:08
Judged At
2025-06-19 20:37:08
Judged By
Score
93
Total Time
≥1099ms
Peak Memory
≥2.066 MiB