이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... |