Submission #106143

#TimeUsernameProblemLanguageResultExecution timeMemory
106143ihdigniteVim (BOI13_vim)C++14
50 / 100
2073 ms203136 KiB
#include <bits/stdc++.h> using namespace std; #define ar array const int mxN=5e3; int n, ans, d[mxN][mxN], nxt[mxN+1][10]; string s; priority_queue<ar<int, 3>, vector<ar<int, 3>>, greater<ar<int, 3>>> pq; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> s; fill(nxt[n], nxt[n]+10, n); for(int i=n-1; ~i; --i) { memcpy(nxt[i], nxt[i+1], 40); nxt[i][s[i]-'a']=i; } int e=n-1; while(e&&s[e-1]^'e') --e; memset(d, 0x3f, sizeof(d)); d[0][0]=0; pq.push({0, 0, 0}); while(pq.size()) { ar<int, 3> u=pq.top(); pq.pop(); if(u[0]>d[u[1]][u[2]]) continue; if(u[1]>=e) { ans=u[0]; break; } vector<ar<int, 3>> t; for(int k=0; k<10; ++k) if(k^4&&nxt[u[2]+1][k]<n) t.push_back({2, u[1], nxt[u[2]+1][k]}); if(u[2]) t.push_back({1, u[1], u[2]-1}); if(nxt[u[1]+1][4]<u[2]) { int y=n; for(int j=0; j<10; ++j) if(j^4) y=min(y, nxt[nxt[u[1]+1][4]][j]); t.push_back({u[2]-nxt[u[1]+1][4], u[2], y}); } for(ar<int, 3> v : t) { if(u[0]+v[0]<d[v[1]][v[2]]) { d[v[1]][v[2]]=u[0]+v[0]; pq.push({u[0]+v[0], v[1], v[2]}); } } } for(char c : s) ans+=c=='e'; cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...