Submission #3589239


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;
}

V<V< int >> edge(26, V< int >(2 * 100000 + 10));
V<V<P<int, string>>> cost(26,V<P<int,string>>(2 * 100000 + 10,{LINF,""}));
int N;

void Dijkstra() {
	priority_queue<P<P<int, string>, P<int, int>>, V<P<P<int, string>, P<int, int>>>, greater<P<P<int, string>, P<int, int>>>> pq;
	cost[0][0] = { 0,"" };
	pq.push({ {0,""},{0,0} });
	while(!pq.empty()){
		int cost_from = pq.top().first.first;
		string str_from = pq.top().first.second;
		int alp_from = pq.top().second.first;
		int idx_from = pq.top().second.second;
		pq.pop();
		if (idx_from == N - 1) continue;

		REP(i, 26) {
			int cost_to, alp_to, idx_to;
			string str_to;
			char ch = char(int(i + 'a'));
			cost_to = cost_from + 1;
			alp_to = i;
			idx_to = edge[i][idx_from];
			str_to = str_from;
			str_to.push_back(ch);

			if ((cost_to < cost[alp_to][idx_to].first) || (cost_to == cost[alp_to][idx_to].first && str_to < cost[alp_to][idx_to].second)) {
				cost[alp_to][idx_to] = { cost_to,str_to };
				pq.push({ {cost_to,str_to},{alp_to,idx_to} });
			}
		}
	}
	return;
}

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

	map<int, V<string>> mp;
	REP(i, 26) mp[cost[i][N - 1].first].push_back(cost[i][N - 1].second);
	for(auto u:mp){
		sort(ALL(u.second));
		cout << u.second[0] << endl;
		return 0;
	}
	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 3910 Byte
Status TLE
Exec Time 2186 ms
Memory 1170232 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 600
Status
AC × 3
AC × 19
TLE × 4
MLE × 13
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 64 ms 105072 KB
10.txt MLE 959 ms 405304 KB
11.txt MLE 971 ms 403512 KB
12.txt MLE 916 ms 397368 KB
13.txt MLE 924 ms 402616 KB
14.txt MLE 918 ms 398904 KB
15.txt MLE 921 ms 401592 KB
16.txt MLE 926 ms 403256 KB
17.txt MLE 1218 ms 635192 KB
18.txt MLE 1339 ms 717880 KB
19.txt MLE 1680 ms 909752 KB
2.txt AC 72 ms 105072 KB
20.txt TLE 2098 ms 1124664 KB
21.txt TLE 2177 ms 1153336 KB
22.txt TLE 2185 ms 1166904 KB
23.txt TLE 2186 ms 1170232 KB
24.txt AC 715 ms 207672 KB
25.txt AC 626 ms 128952 KB
26.txt AC 655 ms 168888 KB
27.txt AC 617 ms 137272 KB
28.txt AC 632 ms 143416 KB
29.txt AC 706 ms 217016 KB
3.txt AC 107 ms 105072 KB
30.txt AC 709 ms 212152 KB
4.txt AC 92 ms 105072 KB
5.txt AC 412 ms 179128 KB
6.txt AC 427 ms 179256 KB
7.txt MLE 990 ms 409528 KB
8.txt MLE 954 ms 402488 KB
9.txt MLE 947 ms 405176 KB
sample1.txt AC 69 ms 105072 KB
sample2.txt AC 70 ms 105072 KB
sample3.txt AC 71 ms 105072 KB