Submission #936842

#TimeUsernameProblemLanguageResultExecution timeMemory
936842IrateType Printer (IOI08_printer)C++14
100 / 100
83 ms55624 KiB
#include<bits/stdc++.h> using namespace std; struct Trie{ vector<vector<int>>trie; vector<bool>isWord; int nxt = 1, mxN = 5e5 + 5; string S = ""; Trie(){ trie.resize(26); for(int i = 0;i < 26;++i){ trie[i].resize(mxN); } isWord.resize(mxN); } void Insert(string &s){ int cur = 0; for(int i = 0;i < s.size();++i){ if(trie[s[i] - 'a'][cur]){ cur = trie[s[i] - 'a'][cur]; } else{ trie[s[i] - 'a'][cur] = nxt; cur = nxt; nxt++; } } isWord[cur] = 1; } void Traverse(int cur, bool check, int indx, string &longest){ if(isWord[cur]){ S += 'P'; S += '\n'; } for(int i = 0;i < 26;++i){ if(!check && indx < longest.size() && longest[indx] == char('a' + i))continue; if(trie[i][cur]){ S += char('a' + i); S += '\n'; Traverse(trie[i][cur], 1, 0, longest); } } if(!check && indx < longest.size()){ S += longest[indx]; S += '\n'; Traverse(trie[longest[indx] - 'a'][cur], 0, indx + 1, longest); } S += '-'; S += '\n'; } }; int main(){ // ios_base::sync_with_stdio(0); // cin.tie(0); int n; cin >> n; Trie tr; int mx = 0; string longest = ""; for(int i = 0;i < n;++i){ string s; cin >> s; if(s.size() > mx){ mx = s.size(); longest = s; } tr.Insert(s); } tr.Traverse(0, 0, 0, longest); while(tr.S.back() == '-' || tr.S.back() == '\n')tr.S.pop_back(); cout << (tr.S.size() + 1) / 2 << "\n" << tr.S; }

Compilation message (stderr)

printer.cpp: In member function 'void Trie::Insert(std::string&)':
printer.cpp:17:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |         for(int i = 0;i < s.size();++i){
      |                       ~~^~~~~~~~~~
printer.cpp: In member function 'void Trie::Traverse(int, bool, int, std::string&)':
printer.cpp:35:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |             if(!check && indx < longest.size() && longest[indx] == char('a' + i))continue;
      |                          ~~~~~^~~~~~~~~~~~~~~~
printer.cpp:42:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |         if(!check && indx < longest.size()){
      |                      ~~~~~^~~~~~~~~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:62:21: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   62 |         if(s.size() > mx){
      |            ~~~~~~~~~^~~~
#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...