Submission #3589650


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 + ".";

	int N = s.size();

	V<V< int >> edge(N, V< int >(26, LINF));
	V<V<P<int, string>>> dp(N, V<P<int, string>>(26, { LINF,"" }));

	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 3645 Byte
Status MLE
Exec Time 1997 ms
Memory 1200960 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 1 ms 256 KB
10.txt MLE 921 ms 441280 KB
11.txt MLE 905 ms 439872 KB
12.txt MLE 907 ms 432832 KB
13.txt MLE 975 ms 438592 KB
14.txt MLE 908 ms 434240 KB
15.txt MLE 914 ms 437568 KB
16.txt MLE 916 ms 439232 KB
17.txt MLE 1147 ms 676288 KB
18.txt MLE 1250 ms 764608 KB
19.txt MLE 1524 ms 959808 KB
2.txt AC 4 ms 896 KB
20.txt MLE 1914 ms 1158080 KB
21.txt MLE 1947 ms 1176768 KB
22.txt MLE 1972 ms 1191232 KB
23.txt MLE 1997 ms 1200960 KB
24.txt AC 719 ms 228928 KB
25.txt AC 586 ms 143808 KB
26.txt AC 669 ms 183104 KB
27.txt AC 612 ms 151360 KB
28.txt AC 627 ms 157504 KB
29.txt AC 730 ms 231104 KB
3.txt AC 28 ms 7296 KB
30.txt AC 725 ms 230592 KB
4.txt AC 28 ms 7296 KB
5.txt AC 385 ms 140668 KB
6.txt AC 378 ms 140924 KB
7.txt MLE 984 ms 446144 KB
8.txt MLE 919 ms 438080 KB
9.txt MLE 983 ms 441664 KB
sample1.txt AC 1 ms 256 KB
sample2.txt AC 1 ms 256 KB
sample3.txt AC 2 ms 384 KB