Submission #1176476

#TimeUsernameProblemLanguageResultExecution timeMemory
1176476lmquanType Printer (IOI08_printer)C++20
100 / 100
75 ms56060 KiB
#define taskname "" #include <iostream> #include <vector> #include <cstring> #include <string> using namespace std; const int kNN = 500005; string result = "", _max = ""; struct Trie { struct TNode { int child[26], terminal; } a[kNN]; int num_node; Trie() : num_node(0) { memset(a[num_node].child, -1, sizeof(a[num_node].child)); a[num_node].terminal = 0; } void Add(string s) { int p = 0; for (char x : s) { if (a[p].child[x - 'a'] == -1) { a[p].child[x - 'a'] = ++num_node; memset(a[num_node].child, -1, sizeof(a[num_node].child)); a[num_node].terminal = 0; } p = a[p].child[x - 'a']; } a[p].terminal++; } void DFS(int d, int node, bool b) { for (int i = 1; i <= a[node].terminal; i++) { result += 'P'; } if (d == _max.size()) { return ; } if (b) { for (int i = 0; i < 26; i++) { if (i != (_max[d] - 'a') && (a[node].child[i] != -1)) { result += char('a' + i); DFS(d + 1, a[node].child[i], false); result += '-'; } } result += _max[d]; DFS(d + 1, a[node].child[_max[d] - 'a'], true); } else { for (int i = 0; i < 26; i++) { if (a[node].child[i] != -1) { result += char('a' + i); DFS(d + 1, a[node].child[i], false); result += '-'; } } } } }; int main() { if (fopen(taskname".inp", "r")) { freopen(taskname".inp", "r", stdin); freopen(taskname".out", "w", stdout); } ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; Trie t; for (int i = 1; i <= n; i++) { string s; cin >> s; t.Add(s); if (s.size() > _max.size()) { _max = s; } } t.DFS(0, 0, true); cout << result.size() << '\n'; for (auto i : result) { cout << i << '\n'; } return 0; }

Compilation message (stderr)

printer.cpp: In function 'int main()':
printer.cpp:67:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |     freopen(taskname".inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
printer.cpp:68:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   68 |     freopen(taskname".out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...