Submission #1132702

#TimeUsernameProblemLanguageResultExecution timeMemory
1132702DangKhoizzzzType Printer (IOI08_printer)C++20
100 / 100
272 ms76664 KiB
#include <bits/stdc++.h> #define pii pair <int , int> #define fi first #define se second #include <cstdint> using namespace std; const int maxn = 5e5 + 7; const int mod = 1e9 + 7; struct node { int cnt , child[26]; node(){ cnt = 0; for(int i = 0; i < 26; i++) child[i] = -1; } }; vector <node> trie; vector <int> g[maxn]; int maxdep[maxn]; char val[maxn]; int ans = 0; void ADD(string s) { int cur = 0; maxdep[0] = max(maxdep[0] , (int)s.size() + 1); for(char ch: s) { int c = ch - 'a'; if(trie[cur].child[c] == -1) { trie[cur].child[c] = (int)trie.size(); g[cur].push_back((int)trie.size()); trie.push_back(node()); ans++; } cur = trie[cur].child[c]; maxdep[cur] = max(maxdep[cur] , (int)s.size()+1); val[cur] = ch; } trie[cur].cnt++; } int remain; void dfs(int u) { if(u != 0) cout << val[u] << '\n'; while(trie[u].cnt > 0 && u != 0) { cout << 'P' << '\n'; trie[u].cnt--; remain--; } vector <pii> order; for(int i = 0; i < 26; i++) { order.push_back({maxdep[trie[u].child[i]] , trie[u].child[i]}); } sort(order.begin() , order.end()); for(pii tmp: order) { int v = tmp.se; if(v == -1) continue; dfs(v); } if(remain > 0) cout << '-' << '\n'; } int n; void solve() { cin >> n; remain = n; trie.push_back(node()); for(int i = 1; i <= n; i++) { string ss; cin >> ss; ADD(ss); //cout << ans << '\n'; } cout << ans*2 - (maxdep[0] - 1) + n << '\n'; dfs(0); } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); 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...