답안 #1115659

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1115659 2024-11-20T18:08:29 Z Nahuepera Type Printer (IOI08_printer) C++17
10 / 100
43 ms 37488 KB
#include <bits/stdc++.h>
#define tip tuple<int, string>

using namespace std;

struct TrieNodeStruct {
    TrieNodeStruct* children[26];
    bool isEndOfWord;
    
    TrieNodeStruct() {
        isEndOfWord = false;
        for(int i = 0; i < 26; i++) {
            children[i] = nullptr;
        }
    }
};

struct TrieStruct {
    TrieNodeStruct* root;
    
    TrieStruct() {
        root = new TrieNodeStruct();
    }
    
    string insert(string word) {  
      TrieNodeStruct* current = root;
      string res = "";
      
      for(char c : word) {
        int index = c - 'a';
        if(current->children[index] == nullptr) {
          current->children[index] = new TrieNodeStruct();
        }
        else{
          res += c;
        }
        current = current->children[index];
      }
      current->isEndOfWord = true;

      return res;
    }
};

int main(){
  int n; cin >> n;
  vector<tip> lst(n);
  for(int i = 0; i < n; i++){
    string s; cin >> s;
    lst[i] = make_tuple(s.length(), s);
  }

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

  TrieStruct t;
  string res = "";
  int size = 0;

  auto [nl, sl] = lst[0];
  t.insert(sl);
  int last = nl;
  for(int j = 0; j < nl; j++){
    res += sl[j];
    res += '\n';
    size++;
  }
  res += 'P';
  res += '\n';
  size++;
  

  for(int i = 1; i < n; i++){
    auto [n, s] = lst[i];
    string r = t.insert(s);
    // cout << s << ": " << r << '\n';
    for(int j = 0; j < last - r.length(); j++){
      res += '-';
      res += '\n';
      size++;
    }
    for(int j = 0 + r.length(); j < n; j++){
      res += s[j];
      res += '\n';
      size++;
    }
    res += 'P';
    res += '\n';
    size++;

    last = n;
  }
  cout << size << '\n';
  cout << res;

  return 0;

}

Compilation message

printer.cpp: In function 'int main()':
printer.cpp:76:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |     for(int j = 0; j < last - r.length(); j++){
      |                    ~~^~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Incorrect 1 ms 336 KB printed invalid word
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 1872 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 6140 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 16 ms 15196 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 43 ms 37488 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 36 ms 29600 KB printed invalid word
2 Halted 0 ms 0 KB -