제출 #256291

#제출 시각아이디문제언어결과실행 시간메모리
256291amoo_safarVim (BOI13_vim)C++17
60 / 100
456 ms200988 KiB
// Zende bad Shoma nasime faghat !
#include <bits/stdc++.h>

#define pb push_back
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define debug(x) cerr << #x << " : " << x << '\n'

using namespace std;

typedef long long ll;
typedef long double ld;
typedef string str;
typedef pair<ll, ll> pll;

const ll Mod = 1000000007LL;
const int N = 5e3 + 10;
const int Inf = 1e9;
const ll Log = 30;

str s;
int dp[N][N];
int nx[N][12], nxe[N], ps[N], ps2[N];

int main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	ll n;
	cin >> n >> s;


	memset(nx, -1, sizeof nx);
	nxe[n - 1] = n - 1;
	for(int i = n - 2; i >= 0; i--){
		for(int j = 0; j < 10; j++) nx[i][j] = nx[i + 1][j];
		nx[i][s[i + 1] - 'a'] = i + 1;
		nxe[i] = (s[i] == 'e' ? nxe[i + 1] : i);
	}

	vector<int> E;
	ps2[0] = 1;
	for(int i = 1; i < n; i++){
		if(s[i] == 'e') E.pb(i);
		ps[i] = ps[i - 1] + (s[i] == 'e' ? 1 : 0);
		ps2[i] = ps2[i - 1] + (s[i] == 'e' ? 0 : 1);
	}

	int ce = E.size();

	memset(dp, 31, sizeof dp);
	dp[0][0] = 0;
	for(int j = 0; j < ce; j++){
		
		for(int i = 0; i < n; i++){
			if(s[i] == 'e') continue;

			for(int c = 0; c < 10; c++){
				if(nx[i][c] != -1) dp[nx[i][c]][j] = min(dp[nx[i][c]][j], dp[i][j] + 2);
			}
			if(E[j] < i){
				dp[ nxe[E[j]] ][ps[i]] = min(dp[ nxe[E[j]] ][ps[i]], dp[i][j] + ps2[i] - ps2[nxe[E[j]]]);
			}
		}
	}
	int ans = Inf;
	for(int i = 0; i < n; i++){
		ans = min(ans, dp[i][ce] + ce + ce);
	}
	//debug(dp[3][2]);
	//debug(nx[3][5]);
	//debug(dp[9][2]);

	cout << ans << '\n';
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...