답안 #1115641

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1115641 2024-11-20T17:37:53 Z Nahuepera Type Printer (IOI08_printer) C++17
0 / 100
19 ms 6224 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;
    }
    
    bool search(string word) {
        TrieNodeStruct* current = root;
        for(char c : word) {
            int index = c - 'a';
            if(current->children[index] == nullptr) {
                return false;
            }
            current = current->children[index];
        }
        return current->isEndOfWord;
    }

    bool startsWithDirect(string prefix) {
        TrieNodeStruct* current = root;
        for(char c : prefix) {
            int index = c - 'a';
            if(current->children[index] == nullptr) {
                return false;
            }
            current = current->children[index];
        }
        return true;  // Si llegamos aquí, el prefijo existe
    }
};

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];
  string r = t.insert(sl);
  int last = n;
  for(int j = 0; j < n; 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;
    // if(i == 0) continue;
  }
  cout << size << '\n';
  cout << res << '\n';

}

Compilation message

printer.cpp: In function 'int main()':
printer.cpp:100:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  100 |     for(int j = 0; j < last - r.length(); j++){
      |                    ~~^~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB printed invalid word
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 592 KB Line "
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB Line "
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB Line "
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB Line "
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 1872 KB Line "
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 6224 KB Line "
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 5 ms 1360 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 10 ms 2384 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 19 ms 2644 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -