Submission #397447

#TimeUsernameProblemLanguageResultExecution timeMemory
397447AugustinasJucasType Printer (IOI08_printer)C++14
100 / 100
169 ms56440 KiB
#include <bits/stdc++.h> using namespace std; struct node { bool val = 0; int nei[26]; node() { for (int i = 0; i < 26; i++) { nei[i] = -1; } } }; const int dydis = 5e5 + 100; node mas[dydis]; int dbInd = 0; int newN() { node nd; mas[dbInd] = nd; return dbInd++; } vector<int> kur; int mx = 0; vector<int> ans; void add(string a, int ind, int v, int lvl) { if (lvl > mx) { mx = lvl; ans = kur; } kur.push_back(v); if (ind == a.size()) { mas[v].val = 1; kur.pop_back(); return; } int kas = a[ind] - 'a'; if (mas[v].nei[kas] == -1) { mas[v].nei[kas] = newN(); } add(a, ind + 1, mas[v].nei[kas], lvl + 1); kur.pop_back(); } vector<char> ats; void dfs(int v) { if (mas[v].val) { ats.push_back('P'); } bool is = 0; int nex = -1; char kas; for (int i = 0; i < ans.size(); i++) if (ans[i] == v) { is = 1; nex = (i == ans.size() - 1 ? -1 : ans[i + 1]); } for (int i = 0; i < 26; i++) { if (mas[v].nei[i] == -1) { continue; } if (mas[v].nei[i] == nex) { kas = (char)(i + 'a'); continue; } ats.push_back((char)(i + 'a')); dfs(mas[v].nei[i]); ats.push_back('-'); } if (nex != -1) { ats.push_back(kas); dfs(nex); ats.push_back('-'); } } #include <bits/stdc++.h> #include <unistd.h> using namespace std; void ___signal_handler___(int s) { int ignored __attribute__((unused)); if (s == SIGSEGV) { ignored = write(STDOUT_FILENO, "SEGFAULT\n", 9); } else if (s == SIGFPE) { ignored = write(STDOUT_FILENO, "FPEXCEPTION\n", 12); } else { ignored = write(STDOUT_FILENO, "ABORTCLD\n", 9); } return _Exit(s); } [[noreturn]]void no_answer() { int ignored __attribute__((unused)) = write(STDOUT_FILENO, "NOANSWER\n", 9); exit(0); } int main () { std::ios_base::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0); signal(SIGSEGV, ___signal_handler___); signal(SIGFPE, ___signal_handler___); signal(SIGABRT, ___signal_handler___); newN(); int n; cin >> n; for (int i = 0; i < n; i++) { string a; cin >> a; add(a, 0, 0, 0); } dfs(0); while (ats.back() == '-') { ats.pop_back(); } cout << ats.size() << endl; for (auto x : ats) { cout << x << "\n"; } cout << flush; }

Compilation message (stderr)

printer.cpp: In function 'void add(std::string, int, int, int)':
printer.cpp:31:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     if (ind == a.size()) {
      |         ~~~~^~~~~~~~~~~
printer.cpp: In function 'void dfs(int)':
printer.cpp:57:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     for (int i = 0; i < ans.size(); i++) if (ans[i] == v) {
      |                     ~~^~~~~~~~~~~~
printer.cpp:59:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             nex = (i == ans.size() - 1 ? -1 : ans[i + 1]);
      |                    ~~^~~~~~~~~~~~~~~~~
printer.cpp:53:10: warning: variable 'is' set but not used [-Wunused-but-set-variable]
   53 |     bool is = 0;
      |          ^~
#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...