#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct Node {
Node* child[26];
bool isEndOfWord;
int maxDepth;
Node() {
for (int i = 0; i < 26; i++) child[i] = nullptr;
isEndOfWord = false;
maxDepth = 0;
}
};
void insert(Node* root, const string& s) {
Node* curr = root;
for (char c : s) {
int idx = c - 'a';
if (!curr->child[idx]) curr->child[idx] = new Node();
curr = curr->child[idx];
}
curr->isEndOfWord = true;
}
int computeMaxDepth(Node* curr) {
int m = 0;
for (int i = 0; i < 26; i++) {
if (curr->child[i]) {
m = max(m, 1 + computeMaxDepth(curr->child[i]));
}
}
return curr->maxDepth = m;
}
vector<char> operations;
void solve(Node* curr) {
if (curr->isEndOfWord) {
operations.push_back('P');
}
vector<pair<int, int>> children;
for (int i = 0; i < 26; i++) {
if (curr->child[i]) {
children.push_back({curr->child[i]->maxDepth, i});
}
}
sort(children.begin(), children.end());
for (auto& p : children) {
int idx = p.second;
operations.push_back(idx + 'a');
solve(curr->child[idx]);
operations.push_back('-');
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N;
cin >> N;
Node* root = new Node();
for (int i = 0; i < N; i++) {
string s;
cin >> s;
insert(root, s);
}
computeMaxDepth(root);
solve(root);
while (!operations.empty() && operations.back() == '-') {
operations.pop_back();
}
cout << operations.size() << "\n";
for (char op : operations) {
cout << op << "\n";
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |