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], toEnd = 0;
bitset<LIM> bad;
pair<int, string> mx = {0, ""};
void dfs(int u){
while(a[u]--) cout << "P\n";
if(u == toEnd) exit(0);
for(int i=0; i<26; ++i){
if(!g[u][i] || bad[g[u][i]]) continue;
cout << char('a' + i) << '\n';
dfs(g[u][i]);
cout << "-\n";
}
for(int i=0; i<26; ++i){
if(!g[u][i] || !bad[g[u][i]]) continue;
cout << char('a' + i) << '\n';
dfs(g[u][i]);
cout << "-\n";
}
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int n, cnt = 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'] = ++cnt;
u = g[u][c-'a'];
}
++a[u];
}
for(char c : mx.second){
bad[toEnd = g[toEnd][c-'a']] = 1;
}
cout << 2*cnt - 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... |