#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 |