# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
445744 | dxz05 | Type Printer (IOI08_printer) | C++14 | 1098 ms | 70488 KiB |
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>
#pragma GCC optimize("Ofast")
using namespace std;
#define SZ(x) (int)(x).size()
const int MAXN = 6e5 + 3e2;
string str[MAXN];
int next_free = 2;
int trie[MAXN][26], term[MAXN];
int mx[MAXN];
void add(int ind, int val, string &s){
int v = 1;
for (int i = 0; i < s.size(); i++){
int x = s[i] - 'a';
if (trie[v][x] == 0) trie[v][x] = next_free++;
v = trie[v][x];
mx[v] = max(mx[v], val);
}
term[v] = 1;
}
vector<char> ans;
int n, cnt = 0;
void solve(int v){
if (term[v]){
cnt++;
ans.push_back('P');
if (cnt == n){
cout << ans.size() << endl;
for (char c : ans) cout << c << endl;
exit(0);
}
}
int best = 0, ind = -1;
for (int i = 0; i < 26; i++){
if (trie[v][i] != 0){
if (mx[trie[v][i]] > best){
best = mx[trie[v][i]];
ind = i;
}
}
}
for (int i = 0; i < 26; i++){
if (trie[v][i] != 0 && ind != i){
ans.push_back('a' + i);
solve(trie[v][i]);
ans.push_back('-');
}
}
if (ind != -1){
ans.push_back('a' + ind);
solve(trie[v][ind]);
ans.push_back('-');
}
}
int main(){
//ios_base::sync_with_stdio(false);
//cin.tie(nullptr); cout.tie(nullptr);
scanf("%d", &n);
int ind = 0;
for (int i = 1; i <= n; i++){
char c[25];
scanf("%s", &c);
int len = strlen(c);
str[i].resize(len);
for (int j = 0; j < len; j++) str[i][j] = c[j];
//cout << str[i] << endl;
if (str[i].size() > str[ind].size()) ind = i;
}
string longest = str[ind];
for (int i = 1; i <= n; i++){
int j = 0;
while (j < str[i].size() && str[i][j] == longest[j]) j++;
add(i, j, str[i]);
//cout << j << ' ' << str[i] << endl;
}
solve(1);
return 0;
}
/**
3
print
the
poem
*/
Compilation message (stderr)
# | 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... |