Submission #1313878

#TimeUsernameProblemLanguageResultExecution timeMemory
1313878algoproclubType Printer (IOI08_printer)C++20
20 / 100
62 ms70116 KiB
// UUID: 89d0103a-87d5-45f0-805f-72471f687f61 #include <bits/stdc++.h> using namespace std; vector<vector<int>> trie(25000*20+1, vector<int>(26, -1)); vector<bool> iswordend(25000*20+1, false); vector<int> cnt(25000*20+1, 0); int nodes = 0; vector<char> ops; void insert(const string s){ int node = 0; for(int i = 0; i < s.size(); i++) { if (trie[node][s[i] - 'a'] == -1) trie[node][s[i] - 'a'] = ++nodes; node = trie[node][s[i] - 'a']; cnt[node]++; if (i == s.size()-1) iswordend[node]=true; } } void dfs(int node){ if (iswordend[node]) ops.push_back('P'); vector<pair<int, int>> curr; //longest, char's val for(int i = 0; i < 26; i++) { if (trie[node][i] != -1) curr.push_back({cnt[trie[node][i]], i}); } sort(curr.begin(), curr.end()); for(auto i : curr){ ops.push_back((char) i.second + 'a'); dfs(trie[node][i.second]); } ops.push_back('-'); } void solve() { int n; cin >> n; for (int i = 0; i < n; i++){ string s; cin >> s; insert(s); } dfs(0); for (int i = ops.size()-1; i >= 0; i--){ if (ops[i] != '-') break; ops.pop_back(); } cout << ops.size() << "\n"; for (char c : ops) cout << c << "\n"; return; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; //cin >> t; while (t--) { solve(); } return 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...