#include <bits/stdc++.h>
#include <iomanip>
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define ll long long
#define ld long double
#define el '\n'
#define INF 1e18
//#define int ll
using namespace std;
const ll mod = 1e9 + 7;
const ll inf = 1e9;
const ll MOD = 998244353;
const int MAXV = 200000;
const int MOD1 = 1000000007;
const int MOD2 = 1000000009;
const int BASE = 911382323;
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
struct Node {
int next[26];
bool isWord;
int mxD;
Node() {
memset(next, -1, sizeof(next));
isWord = false;
mxD = 0;
}
};
vector<Node> trie;
vector<char> ops;
int calc(int u) {
int best = trie[u].isWord ? 0 : -1;
for (int c = 0; c < 26; c++) {
int v = trie[u].next[c];
if (v != -1) {
best = max(best, 1 + calc(v));
}
}
trie[u].mxD = best;
return best;
}
void dfs(int u) {
if (trie[u].isWord) {
ops.push_back('P');
}
vector<int> children;
for (int c = 0; c < 26; c++) {
if (trie[u].next[c] != -1) {
children.push_back(c);
}
}
sort(children.begin(), children.end(), [&](int a, int b) {
return trie[trie[u].next[a]].mxD < trie[trie[u].next[b]].mxD;
});
for (int c : children) {
int v = trie[u].next[c];
ops.push_back('a' + c);
dfs(v);
ops.push_back('-');
}
}
void H_H() {
int n;
cin >> n;
trie.reserve(500000);
trie.emplace_back();
for (int i = 0; i < n; i++) {
string s;
cin >> s;
int u = 0;
for (char ch : s) {
int c = ch - 'a';
if (trie[u].next[c] == -1) {
trie[u].next[c] = trie.size();
trie.emplace_back();
}
u = trie[u].next[c];
}
trie[u].isWord = true;
}
calc(0);
dfs(0);
while (!ops.empty() && ops.back() == '-') {
ops.pop_back();
}
cout << ops.size() << el;
for (char c : ops) {
cout << c << el;
}
}
signed main()
{
fast;
ll tc = 1;
//cin >> tc;
while (tc--)
{
H_H();
}
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... |