Submission #485950

#TimeUsernameProblemLanguageResultExecution timeMemory
485950AlexandruabcdeType Printer (IOI08_printer)C++14
100 / 100
162 ms99516 KiB
#include <bits/stdc++.h> using namespace std; constexpr int SIGMAX = 26; constexpr int NMAX = 25005; struct Node { Node *Next[SIGMAX]; int cnt; int val; Node () { for (int i = 0; i < SIGMAX; ++ i ) Next[i] = nullptr; val = 0; cnt = 0; } }; Node *Trie = new Node; void Add (Node *Tree, string cuv, int lit) { if (lit == cuv.size()) { Tree->val = max(Tree->val, (int)cuv.size()); Tree->cnt ++; return; } int urm = cuv[lit]-'a'; if (Tree->Next[urm] == nullptr) { Tree->Next[urm] = new Node; Add(Tree->Next[urm], cuv, lit+1); } else Add(Tree->Next[urm], cuv, lit+1); Tree->val = max(Tree->val, Tree->Next[urm]->val); } int N; vector <char> Ans; void Read () { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> N; for (int i = 1; i <= N; ++ i ) { string S; cin >> S; Add(Trie, S, 0); } } void FindAnswer (Node *Tree) { for (int i = 0; i < Tree->cnt; ++ i ) Ans.push_back('P'); for (int i = 0; i < SIGMAX; ++ i ) { if (Tree->Next[i] == nullptr || Tree->Next[i]->val == Tree->val) continue; Ans.push_back(('a' + i)); FindAnswer(Tree->Next[i]); Ans.push_back('-'); } for (int i = 0; i < SIGMAX; ++ i ) { if (Tree->Next[i] == nullptr || Tree->Next[i]->val < Tree->val) continue; Ans.push_back(('a' + i)); FindAnswer(Tree->Next[i]); Ans.push_back('-'); } } void Solve () { FindAnswer(Trie); while (Ans.size() > 0 && Ans.back() == '-') Ans.pop_back(); cout << Ans.size() << '\n'; for (int i = 0; i < Ans.size(); ++ i ) cout << Ans[i] << '\n'; } int main () { Read(); Solve(); return 0; }

Compilation message (stderr)

printer.cpp: In function 'void Add(Node*, std::string, int)':
printer.cpp:26:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |     if (lit == cuv.size()) {
      |         ~~~~^~~~~~~~~~~~~
printer.cpp: In function 'void Solve()':
printer.cpp:89:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |     for (int i = 0; i < Ans.size(); ++ i )
      |                     ~~^~~~~~~~~~~~
#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...