Submission #746976

# Submission time Handle Problem Language Result Execution time Memory
746976 2023-05-23T10:08:48 Z khulegub Type Printer (IOI08_printer) C++14
20 / 100
70 ms 53060 KB
#include <bits/stdc++.h>

using namespace std;

const int N = 500005;

/** Node count*/
int k = 1;

int to[N][26];
char a[N];
int h[N];
vector<char> ans;

void calc_height(int u) {
  int height = 0;
  for (int i = 0; i < 26; i++) {
    if (to[u][i] != -1) {
      int v = to[u][i];
      calc_height(v);
      height = max(height, 1 + h[v]);
    }
  }
  h[u] = height;
}

void dfs(int u) {
  if (u > 0) ans.push_back(a[u]);

  vector<pair<int, int> > children;

  for (int i = 0; i < 26; i++) {
    if (to[u][i] != -1) {
      int v = to[u][i];
      children.push_back({h[v], v});
    }
  }

  sort(children.begin(), children.end());

  for (int i = 0; i < children.size(); i++) {
    int v = children[i].second;
    dfs(v);
  }

  if (h[u] == 0) {
    ans.push_back('P');
  }

  if (u > 0) ans.push_back('-');
}

int main() {
  int n;
  cin >> n;

  memset(to, -1, sizeof to);

  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;

    int curr = 0;

    for (int j = 0; j < s.length(); j++) {
      int c = s[j] - 'a';
      if (to[curr][c] == -1) {
        // Create a new node.
        to[curr][c] = k;
        k++;
      }
      a[to[curr][c]] = s[j];
      
      curr = to[curr][c];
    }
  }

  calc_height(0);
  dfs(0);


  while (ans.size() > 0 && ans.back() == '-') ans.pop_back();

  cout << ans.size() << '\n';

  for (char c : ans) cout << c << '\n';
}

Compilation message

printer.cpp: In function 'void dfs(int)':
printer.cpp:41:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |   for (int i = 0; i < children.size(); i++) {
      |                   ~~^~~~~~~~~~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:65:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |     for (int j = 0; j < s.length(); j++) {
      |                     ~~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 20 ms 51156 KB Output is correct
2 Correct 19 ms 51148 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 51168 KB Output is correct
2 Correct 21 ms 51120 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 19 ms 51156 KB didn't print every word
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 19 ms 51156 KB Output is correct
2 Incorrect 19 ms 51276 KB didn't print every word
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 20 ms 51156 KB didn't print every word
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 22 ms 51256 KB didn't print every word
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 31 ms 51488 KB didn't print every word
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 44 ms 52012 KB didn't print every word
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 70 ms 53060 KB didn't print every word
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 62 ms 52672 KB didn't print every word
2 Halted 0 ms 0 KB -