Submission #3589635


Source Code Expand

#include <iostream>
#include <fstream>
#include <cmath>  
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <numeric>
#include <functional>
#include <string> 
#include <vector>
#include <bitset>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <deque>

using namespace std;
using ll = long long;

template<class T> using V = vector<T>;
template<class T, class U> using P = pair<T, U>;

#define REP(i,n) for(int i = 0; i < int(n); i++)
#define FOR(i, m, n) for(int i = int(m);i < int(n);i++)
#define ALL(obj) (obj).begin(),(obj).end()

const ll MOD = (ll)1e9 + 7;
const ll HINF = (ll)1e18;
const ll LINF = (ll)1e9;
const long double PI = 3.1415926535897932384626433;

vector<int> dy = { 0,0,1,-1 };
vector<int> dx = { 1,-1,0,0 };

template<class T> void corner(bool flg, T hoge) {
	if (flg) {
		cout << hoge << endl;
		exit(0);
	}
	else return;
}

template <class T, class U>ostream &operator<<(ostream &o, const map<T, U>&obj) {
	o << "{"; for (auto &x : obj) o << " {" << x.first << " : " << x.second << "}" << ","; o << " }"; return o;
}

template <class T>ostream &operator<<(ostream &o, const set<T>&obj) {
	o << "{"; for (auto itr = obj.begin(); itr != obj.end(); ++itr) o << (itr != obj.begin() ? ", " : "") << *itr; o << "}"; return o;
}

template <class T>ostream &operator<<(ostream &o, const vector<T>&obj) {
	o << "{"; for (int i = 0; i < (int)obj.size(); ++i)o << (i > 0 ? ", " : "") << obj[i]; o << "}"; return o;
}

template <class T, class U>ostream &operator<<(ostream &o, const pair<T, U>&obj) {
	o << "{" << obj.first << ", " << obj.second << "}"; return o;
}

template <template <class tmp>  class T, class U> ostream &operator<<(ostream &o, const T<U> &obj) {
	o << "{"; for (auto itr = obj.begin(); itr != obj.end(); ++itr)o << (itr != obj.begin() ? ", " : "") << *itr; o << "}"; return o;
}

void print(void) {
	cout << endl;
}

template <class Head> void print(Head&& head) {
	cout << head;
	print();
}

template <class Head, class... Tail> void print(Head&& head, Tail&&... tail) {
	cout << head << " ";
	print(forward<Tail>(tail)...);
}

void YN(bool flg) {
	cout << ((flg) ? "YES" : "NO") << endl;
}

void Yn(bool flg) {
	cout << ((flg) ? "Yes" : "No") << endl;
}

void yn(bool flg) {
	cout << ((flg) ? "yes" : "no") << endl;
}


int main() {
	string s; cin >> s;
	s = "." + s + ".";
	V<V< int >> edge(2 * 100000 + 10, V< int >(26, LINF));
	V<V<P<int, string>>> dp(2 * 100000 + 10, V<P<int, string>>(26, { LINF,"" }));

	int N = s.size();
	int idx;
	REP(i,26){
		char ch = char(int(i + 'a'));
		idx = N-1;
		for (int j = N-2; 0 <= j; --j) {
			edge[j][i] = idx;
			if (s[j] == ch)idx = j;
		}
	}

	REP(j, 26) dp[0][j] = { 0,"" };

	REP(i,N-1){
		int mini_cnt = LINF;
		string mini_str = "";
		REP(j, 26) {
			if ((dp[i][j].first < mini_cnt) || (dp[i][j].first == mini_cnt && dp[i][j].second < mini_str)) {
				mini_cnt = dp[i][j].first;
				mini_str = dp[i][j].second;
			}
		}
		
		REP(j,26){
			int cnt = mini_cnt + 1;
			char ch = char(int(j + 'a'));
			string str = mini_str;
			str.push_back(ch);
			int to = edge[i][j];
			if ((cnt < dp[to][j].first) || (cnt == dp[to][j].first && str < dp[to][j].second)) {
				dp[to][j].first = cnt;
				dp[to][j].second = str;
			}
		}
	}

	int ans_cnt = LINF;
	string ans_str = "";
	REP(j, 26) {
		if ((dp[N-1][j].first < ans_cnt) || (dp[N - 1][j].first == ans_cnt && dp[N - 1][j].second < ans_str)) {
			ans_cnt = dp[N - 1][j].first;
			ans_str = dp[N - 1][j].second;
		}
	}
	cout << ans_str << endl;
	return 0;
}

Submission Info

Submission Time
Task E - Don't Be a Subsequence
User ningenMe
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3669 Byte
Status MLE
Exec Time 1996 ms
Memory 1199168 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 600
Status
AC × 3
AC × 19
MLE × 17
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt
All sample1.txt, sample2.txt, sample3.txt, 1.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 2.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 3.txt, 30.txt, 4.txt, 5.txt, 6.txt, 7.txt, 8.txt, 9.txt, sample1.txt, sample2.txt, sample3.txt
Case Name Status Exec Time Memory
1.txt AC 94 ms 115840 KB
10.txt MLE 909 ms 441280 KB
11.txt MLE 913 ms 439872 KB
12.txt MLE 900 ms 433472 KB
13.txt MLE 909 ms 438592 KB
14.txt MLE 904 ms 434240 KB
15.txt MLE 914 ms 437568 KB
16.txt MLE 907 ms 439232 KB
17.txt MLE 1148 ms 676288 KB
18.txt MLE 1250 ms 762432 KB
19.txt MLE 1535 ms 960448 KB
2.txt AC 100 ms 115968 KB
20.txt MLE 1911 ms 1158208 KB
21.txt MLE 1950 ms 1182656 KB
22.txt MLE 1969 ms 1193024 KB
23.txt MLE 1996 ms 1199168 KB
24.txt AC 722 ms 228928 KB
25.txt AC 588 ms 143808 KB
26.txt AC 667 ms 183104 KB
27.txt AC 609 ms 151360 KB
28.txt AC 625 ms 157504 KB
29.txt AC 732 ms 231104 KB
3.txt AC 121 ms 117120 KB
30.txt AC 735 ms 230592 KB
4.txt AC 121 ms 117120 KB
5.txt AC 429 ms 198524 KB
6.txt AC 429 ms 198780 KB
7.txt MLE 928 ms 446016 KB
8.txt MLE 922 ms 438080 KB
9.txt MLE 921 ms 441664 KB
sample1.txt AC 98 ms 115840 KB
sample2.txt AC 98 ms 115840 KB
sample3.txt AC 98 ms 115840 KB