#include<bits/stdc++.h>
using namespace std;
struct node {
node* to[ 26 ];
bool terminal = false;
int h = 0;
};
void add_string(node* v, string &s) {
for(int i = 0;i < (int)s.size();i++) {
if(!v->to[s[ i ] - 'a'])
v->to[s[ i ] - 'a'] = new node();
v = v->to[s[ i ] - 'a'];
v->h = max(v->h, (int)s.size() - 1 - i);
}
v->terminal = true;
}
vector<char> op;
void dfs(node* v) {
if(v->terminal) op.push_back('P');
vector<int> x;
for(int i = 0;i < 26;i++) if(v->to[ i ]) x.push_back(i);
sort(x.begin(), x.end(), [&](int a, int b){return v->to[ a ]->h < v->to[ b ]->h;});
for(int i : x) {
op.push_back(i + 'a');
dfs(v->to[ i ]);
op.push_back('-');
}
}
node trie;
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int n;
cin >> n;
for(int i = 0;i < n;i++) {
string s;
cin >> s;
add_string(&trie, s);
}
dfs(&trie);
while(!op.empty() && op.back() == '-') op.pop_back();
cout << (int)op.size() << '\n';
for(char c : op)
cout << c << '\n';
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
324 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
320 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
448 KB |
Output is correct |
2 |
Correct |
2 ms |
1092 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
1748 KB |
Output is correct |
2 |
Correct |
4 ms |
2260 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
14 ms |
6000 KB |
Output is correct |
2 |
Correct |
21 ms |
12576 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
26 ms |
14772 KB |
Output is correct |
2 |
Correct |
9 ms |
3400 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
60 ms |
36612 KB |
Output is correct |
2 |
Correct |
132 ms |
83760 KB |
Output is correct |
3 |
Correct |
80 ms |
43140 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
51 ms |
28700 KB |
Output is correct |
2 |
Correct |
172 ms |
99528 KB |
Output is correct |
3 |
Correct |
88 ms |
49016 KB |
Output is correct |
4 |
Correct |
142 ms |
93984 KB |
Output is correct |