제출 #1357459

#제출 시각아이디문제언어결과실행 시간메모리
1357459jumpType Printer (IOI08_printer)C++20
100 / 100
64 ms50528 KiB
#include <bits/stdc++.h>
const int N=5e5+10;
int trie[N][27];
int dep[N];
bool leaf[N];
int ptr=1;
void print(int s,bool ldep){
  //std::cout << s << "D";
  if(leaf[s])std::cout << "P\n";
  if(ldep){
    for(int i=0;i<26;i++){
      if(trie[s][i]!=-1){
        std::cout << (char)(i+'a') << "\n";
				print(trie[s][i],true);
				std::cout << "-\n";
      }
    }
    return;
  }
  int large = -1;
  for(int i=0;i<26;i++){
    if((trie[s][i]!=-1)&&(large==-1||dep[trie[s][i]]>dep[trie[s][large]]))large=i;
  }
  if(large==-1)return;
  for(int i=0;i<26;i++){
    if(trie[s][i]!=-1&&i!=large){
      std::cout << (char)(i+'a') << "\n";
      print(trie[s][i],true);
      std::cout << "-\n";
    }
  }
  std::cout << (char)(large+'a') << "\n";
  print(trie[s][large],false);
}
int main() {
  int n;
  std::cin >> n;
  std::fill(trie[0],trie[0]+26,-1);
  for(int i=0;i<n;i++){
    std::string in;
    std::cin >> in;
    int p=0;
    for(int j=0;j<in.size();j++){
      int idx = in[j]-'a';
      if(trie[p][idx]==-1){
        std::fill(trie[ptr],trie[ptr]+26,-1);
				trie[p][idx]=ptr++;
      }
      dep[p]=std::max(dep[p],(int)in.size()-j);
      p=trie[p][idx];
    }
    leaf[p]=1;
  }
  std::cout << (ptr-1)*2-dep[0]+n<<"\n";
  print(0,false);
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…