Submission #1220902

#TimeUsernameProblemLanguageResultExecution timeMemory
1220902kunzaZa183Type Printer (IOI08_printer)C++20
100 / 100
116 ms75656 KiB
#include <bits/stdc++.h>
using namespace std;
int main() {
  cin.tie(0)->sync_with_stdio(0);

  int n;
  cin >> n;
  vector<string> vs(n);
  for (auto &a : vs)
    cin >> a;

  // const int letters = 26;
  struct node {
    map<char, int> mci;
    int ct = 0;
  };

  vector<node> vn;
  vn.emplace_back();

  for (auto &a : vs) {
    int in = 0;
    for (auto c : a) {
      if (!vn[in].mci.count(c)) {
        vn[in].mci[c] = vn.size();
        vn.emplace_back();
      }
      in = vn[in].mci[c];
    }
    vn[in].ct++;
  }

  vector<vector<pair<char, int>>> adj(vn.size());
  vector<int> dp(vn.size());
  for (int i = 0; i < vn.size(); i++) {
    for (auto a : vn[i].mci)
      adj[i].push_back(a);
  }

  function<int(int)> dfs = [&](int cur) {
    dp[cur] = 1;
    for (auto a : adj[cur])
      dp[cur] = max(dp[cur], dfs(a.second) + 1);
    return dp[cur];
  };
  dfs(0);

  for (int i = 0; i < vn.size(); i++) {
    sort(adj[i].begin(), adj[i].end(),
         [&](pair<char, int> a, pair<char, int> b) {
           return dp[a.second] < dp[b.second];
         });
  }

  string ans;

  int ct = 0;
  function<void(int)> dfs2 = [&](int cur) {
    if (vn[cur].ct) {
      ans.push_back('P');
      ct++;
      if (ct == n) {
        cout << ans.size() << "\n";
        for (auto a : ans)
          cout << a << "\n";
        exit(0);
      }
    }

    for (auto a : adj[cur]) {
      ans.push_back(a.first);
      dfs2(a.second);
      ans.push_back('-');
    }
  };
  dfs2(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...