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;
const int LIM = 20 * 25000;
array<int, 26> g[LIM];
int a[LIM], b[LIM], w = 0, j = 0;
pair<int, string> mx = {0, ""};
void dfs(int u){
while(a[u]--) cout << "P\n";
if(u == w) exit(0);
for(int i=0; i<26; ++i){
if(!g[u][i] || g[u][i] == b[u]) continue;
cout << char('a' + i) << '\n';
dfs(g[u][i]);
cout << "-\n";
}
if(!b[u]) return;
cout << mx.second[j++] << '\n';
dfs(b[u]);
cout << "-\n";
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int n, e = 0; cin >> n;
for(int i=0; i<n; ++i){
string s; cin >> s;
mx = max(mx, {s.size(), s});
int u = 0;
for(char c : s){
if(!g[u][c-'a']) g[u][c-'a'] = ++e;
u = g[u][c-'a'];
}
++a[u];
}
for(char c : mx.second)
b[w] = g[w][c-'a'], w = b[w];
cout << 2*e - mx.first + n << '\n';
dfs(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... |