Submission #1247818

#TimeUsernameProblemLanguageResultExecution timeMemory
1247818kaiboyVim (BOI13_vim)C++20
100 / 100
20 ms556 KiB
// coached by rainboy #include <algorithm> #include <iostream> using namespace std; const int N = 70000; const int A = 10; const int INF = 0x3f3f3f3f; char aa[N + 1]; bool ee[N + 1]; int dp[A][A + 1], dq[A][A + 1]; int main() { ios_base::sync_with_stdio(false), cin.tie(NULL); int n; cin >> n >> aa; int k = 0, m = 0; bool e = false; for (int i = 0; i < n; i++) if (aa[i] == 'e') k += 2, e = true; else aa[m] = aa[i] - 'a' - (aa[i] > 'e'), ee[m] = e, m++, e = false; n = m; for (int a = 0; a < A; a++) { for (int b = 0; b <= A; b++) dp[a][b] = INF; dp[a][A] = 2; } for (int i = 1; i < n; i++) { for (int a = 0; a < A; a++) for (int b = 0; b <= A; b++) dq[a][b] = INF; for (int a = 0; a < A; a++) for (int b = 0; b <= A; b++) { int x = dp[a][b]; if (x == INF) continue; if (b == A) { if (a == aa[i]) for (int c = 0; c < A; c++) dq[c][A] = min(dq[c][A], x + 2); else if (!ee[i]) dq[a][A] = min(dq[a][A], x); else for (int c = 0; c < A; c++) dq[c][a] = min(dq[c][a], x + 2); } else { x++; if (a == aa[i]) { for (int c = 0; c < A; c++) if (b == aa[i]) for (int d = 0; d <= A; d++) dq[c][d] = min(dq[c][d], x + 2 + (d < A ? 2 : 0)); else dq[c][b] = min(dq[c][b], x + 2); } else { if (b == aa[i]) for (int d = 0; d <= A; d++) dq[a][d] = min(dq[a][d], x + (d < A ? 2 : 0)); else dq[a][b] = min(dq[a][b], x); } } } for (int a = 0; a < A; a++) for (int b = 0; b <= A; b++) dp[a][b] = dq[a][b]; } cout << k + dp[A - 1][A] - 2 << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...