This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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';
}
# | 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... |