#include <iostream>
#include <vector>
#include <algorithm>
int main(){
std::cin.tie(nullptr)->sync_with_stdio(false);
int n;
std::cin >> n;
std::vector<std::string> strings(n);
std::vector<std::vector<std::pair<char,int>>> trie(500001);
std::vector<int> subtreeSize(500001);
std::vector<bool> finalVertex(500001);
int curVertices = 0;
for(int i = 0; i < n; i++){
std::string s;
std::cin >> s;
int m = (int) s.length();
int curVertex = 0;
for(int j = 0; j < m; j++){
bool found = false;
for(std::pair<char,int> & p : trie[curVertex]){
if(p.first == s[j]){
found = true;
curVertex = p.second;
break;
}
}
if(found == false){
curVertices += 1;
trie[curVertex].push_back({s[j], curVertices});
curVertex = curVertices;
}
if(j == (m - 1)){
finalVertex[curVertex] = true;
}
}
}
auto dfs = [&trie, &subtreeSize](int u, int p, auto && self) -> void {
subtreeSize[u] += 1;
for(std::pair<char,int> & v : trie[u]){
if(v.second != p){
self(v.second, u, self);
subtreeSize[u] += subtreeSize[v.second];
}
}
};
dfs(0, 0, dfs);
for(int i = 0; i <= curVertices; i++){
sort(trie[i].begin(), trie[i].end(), [&subtreeSize](const std::pair<char,int> & a, const std::pair<char,int> & b) -> bool {
return subtreeSize[a.second] < subtreeSize[b.second];
});
}
int built = 0;
std::vector<char> operations;
auto build = [&trie, &curVertices, &finalVertex, &built, &operations](char c, int u, int p, auto && self) -> void{
if(u != 0){
operations.push_back(c);
built += 1;
}
if(finalVertex[u]){
operations.push_back('P');
}
for(std::pair<char,int> & v : trie[u]){
if(v.second != p){
self(v.first, v.second, u, self);
}
}
if(built < curVertices){
operations.push_back('-');
}
};
build('0', 0, 0, build);
std::cout << operations.size() << '\n';
for(char & c : operations){
std::cout << c << '\n';
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
14160 KB |
Output is correct |
2 |
Correct |
4 ms |
14160 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
14216 KB |
Output is correct |
2 |
Correct |
4 ms |
14160 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
5 ms |
14160 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
14160 KB |
Output is correct |
2 |
Correct |
4 ms |
14160 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
14160 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
14416 KB |
Output is correct |
2 |
Incorrect |
6 ms |
14416 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
9 ms |
15184 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
18 ms |
16812 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
44 ms |
20500 KB |
Output is correct |
2 |
Correct |
83 ms |
28448 KB |
Output is correct |
3 |
Incorrect |
43 ms |
21952 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
29 ms |
19308 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |