Submission #1084619

#TimeUsernameProblemLanguageResultExecution timeMemory
1084619Hamed5001Type Printer (IOI08_printer)C++14
100 / 100
140 ms58752 KiB
#include <bits/stdc++.h>

using namespace std;

const int K = 26;
struct Node {
  int next[K];
  int mx_depth = 0;
  bool output = false;

  Node() {
    fill(next, next+K, -1);
  }
};

vector<Node> trie(1);

void add_string(string const& s) {
  int v = 0;
  stack<int> st;
  for (char ch : s) {
    st.push(v);
    int c = ch - 'a';
    if (trie[v].next[c] == -1) {
      trie[v].next[c] = trie.size();
      trie.emplace_back();
    }
    v = trie[v].next[c];
  }
  trie[v].output = true;
  while (!st.empty()) {
    v = st.top();
    st.pop();
    for (int i = 0; i < K; ++i) {
      if (~trie[v].next[i])
        trie[v].mx_depth = max(trie[v].mx_depth, trie[trie[v].next[i]].mx_depth+1);
    }
  }
}

vector<char> ans;
void dfs(int v = 0) {
  if (trie[v].output) ans.push_back('P');
  set<array<int, 3>> st; 
  for (int i = 0; i < K; ++i) {
    if (~trie[v].next[i]) st.insert({trie[trie[v].next[i]].mx_depth, trie[v].next[i], i});
  }
  while (!st.empty()) {
    auto it = *st.begin();
    st.erase(st.begin());
    ans.push_back('a' + it[2]);
    dfs(it[1]);
    ans.push_back('-');
  }
}

int main() {
    cin.tie(0)->sync_with_stdio(false);
    int N; cin >> N;
    for (int i = 0; i < N; ++i) {
      string s; cin >> s;
      add_string(s);
    }
    dfs(0);
    while (!ans.empty() && ans.back() == '-') ans.pop_back();
    cout << ans.size() << endl;
    for (auto it : ans) cout << it << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...