Submission #378410

#TimeUsernameProblemLanguageResultExecution timeMemory
378410YJUVim (BOI13_vim)C++14
50 / 100
2108 ms398428 KiB
#include<bits/stdc++.h> #pragma GCC optimize("unroll-loops,no-stack-protector,Ofast") using namespace std; typedef long long ll; typedef pair<ll,ll> pll; const ll N=5e3+5; const ll INF=(1LL<<60); #define REP(i,n) for(int i=0;i<n;i++) #define REP1(i,n) for(int i=1;i<=n;i++) #define X first #define Y second #define pb push_back #define mp make_pair #define lwb lower_bound ll nxt[N][11],dp[N][N]; string s; vector<ll> loc; ll n,m; ll f(ll have,ll id){ if(have==m)return 0; if(dp[have][id]!=-1)return dp[have][id]; //cout<<have<<" "<<id<<"\n"; dp[have][id]=INF; vector<ll> dis(n,INF); dis[id]=0; ll nhave=0; for(int i=id;i<n;i++){ REP(j,10){ if(nxt[i+1][j]==n||j=='e'-'a')continue; dis[nxt[i+1][j]]=min(dis[nxt[i+1][j]],dis[i]+2); } } for(int i=id;i<n;i++){ while(nhave<m&&loc[nhave]<=i)++nhave; if(i==id||s[i]=='e')continue; if(i>loc[have])dp[have][id]=min(dp[have][id],(i-loc[have])+dis[i]+f(nhave,loc[have]+1)); else dp[have][id]=min(dp[have][id],f(have,i)+dis[i]); } return dp[have][id]; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); memset(dp,-1,sizeof(dp)); cin>>n>>s; REP(j,10)nxt[n][j]=n; for(int i=n-1;i>=0;i--){ REP(j,10)nxt[i][j]=nxt[i+1][j]; nxt[i][s[i]-'a']=i; if(s[i]=='e')loc.pb(i); } sort(loc.begin(),loc.end()); m=loc.size(); cout<<f(0,0)+m<<"\n"; //REP(i,m)REP(j,n)cout<<i<<" "<<j<<" "<<dp[i][j]<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...