Submission #503978

#TimeUsernameProblemLanguageResultExecution timeMemory
503978qwerasdfzxclVim (BOI13_vim)C++14
100 / 100
44 ms29764 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; int dp[70070][12][12], a[70070], on[70070]; int main(){ cin.tie(NULL); ios_base::sync_with_stdio(false); int n, pt = 1, cnt = 0; string s; cin >> n >> s; for (int i=0;i<n;i++){ if (s[i]!='e') {a[pt++] = s[i] - 'a' + 1; continue;} while(i<n && s[i]=='e') i++, cnt++; on[pt] = 1; a[pt++] = s[i] - 'a' + 1; } n = pt - 1; //for (int i=1;i<=n;i++) printf("%c", a[i]+'a'-1); //printf("\n"); //for (int i=1;i<=n;i++) printf("%d", on[i]); //printf("\n"); for (int j=1;j<=10;j++){ for (int k=1;k<=10;k++) dp[1][j][k] = 4; dp[1][j][0] = 2; dp[1][j][11] = 2; } for (int i=2;i<=n;i++){ for (int j=1;j<=10;j++){ for (int k=1;k<=10;k++){ dp[i][j][k] = 1e9; if (a[i]!=j && a[i]!=k) dp[i][j][k] = min(dp[i][j][k], dp[i-1][j][k] + 1); if (a[i]!=j) dp[i][j][k] = min(dp[i][j][k], dp[i-1][j][a[i]] + 3); if (a[i]!=k) dp[i][j][k] = min(dp[i][j][k], dp[i-1][a[i]][k] + 3); dp[i][j][k] = min(dp[i][j][k], dp[i-1][a[i]][a[i]] + 5); if (a[i]!=j) dp[i][j][k] = min(dp[i][j][k], dp[i-1][j][0] + 2); dp[i][j][k] = min(dp[i][j][k], dp[i-1][a[i]][0] + 4); } } for (int j=1;j<=10;j++){ dp[i][j][0] = 1e9; if (a[i]!=j && !on[i]) dp[i][j][0] = min(dp[i][j][0], dp[i-1][j][0]); dp[i][j][0] = min(dp[i][j][0], dp[i-1][a[i]][0] + 2); if (a[i]!=j) dp[i][j][0] = min(dp[i][j][0], dp[i-1][a[i]][j] + 1); dp[i][j][0] = min(dp[i][j][0], dp[i-1][a[i]][a[i]] + 3); dp[i][j][11] = 1e9; if (a[i]!=j) dp[i][j][11] = min(dp[i][j][11], dp[i-1][j][11] + 1); dp[i][j][11] = min(dp[i][j][11], dp[i-1][a[i]][11] + 3); if (a[i]!=j) dp[i][j][11] = min(dp[i][j][11], dp[i-1][j][0]); dp[i][j][11] = min(dp[i][j][11], dp[i-1][a[i]][0] + 2); } dp[i][11][0] = 1e9; if (!on[i]) dp[i][11][0] = min(dp[i][11][0], dp[i-1][11][0]); dp[i][11][0] = min(dp[i][11][0], dp[i-1][a[i]][0]); dp[i][11][0] = min(dp[i][11][0], dp[i-1][a[i]][11] + 1); dp[i][11][0] = min(dp[i][11][0], dp[i-1][a[i]][a[i]] + 2); } //printf("%d\n", dp[1][4][0]); printf("%d\n", dp[n][11][0] + cnt*2); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...