답안 #656370

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
656370 2022-11-07T05:37:38 Z gamigafy Type Printer (IOI08_printer) C++17
100 / 100
155 ms 50792 KB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define sz(x) (int)(x.size())

const int N = 5e5+5;
int n, tot = 0;
char c[N];
bool last[N];
vector<char> ans;
int adj[N][26], dep[N];

void dfs(int u) {
	sort(adj[u], adj[u] + 26, [&](int i, int j) {
		return dep[i] < dep[j];
	});
	for(int i = 0; i < 26; i++) {
		if(adj[u][i]) {
			dfs(adj[u][i]);
		}
	}
}

void dfs2(int u) {
	for(int i = 0; i < 26; i++) {
		if(adj[u][i]) {
			ans.push_back(c[adj[u][i]]);
			if(last[adj[u][i]]) {
				ans.push_back('P');
			}
			dfs2(adj[u][i]);
			ans.push_back('-');
		}
	}
}

int main() {
	cin>>n;

	for(int i = 0; i < n; i++) {
		string s; cin>> s;
		int t = 0;
		for(int j = 0; j < sz(s); j++) {
			int p = s[j] - 'a';
			if(!adj[t][p])
				adj[t][p] = ++tot;
			t = adj[t][p];
			c[t] = s[j];
			dep[t] = max(dep[t], sz(s));
		}
		last[t] = true;
	}

	dfs(0);
	dfs2(0);

	while(ans.back() == '-') {
		ans.pop_back();
	}

	cout<<sz(ans)<<'\n';
	for(auto s : ans) {
		cout<<s<<'\n';
	}
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 368 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 2 ms 724 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 980 KB Output is correct
2 Correct 4 ms 1216 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 3188 KB Output is correct
2 Correct 22 ms 6724 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 7632 KB Output is correct
2 Correct 12 ms 1980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 67 ms 18520 KB Output is correct
2 Correct 132 ms 42628 KB Output is correct
3 Correct 76 ms 22304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 56 ms 14576 KB Output is correct
2 Correct 155 ms 50792 KB Output is correct
3 Correct 98 ms 25168 KB Output is correct
4 Correct 140 ms 47952 KB Output is correct