제출 #1132696

#제출 시각아이디문제언어결과실행 시간메모리
1132696DangKhoizzzzType Printer (IOI08_printer)C++20
100 / 100
144 ms76688 KiB
#include <bits/stdc++.h> #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--; } for(int v: g[u]) { 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'; } for(int i = 0; i < maxn; i++) { if(g[i].empty()) continue; int ok = 0; for(int v: g[i]) ok = max(ok , maxdep[v]); for(int j = 0; j < g[i].size(); j++) { if(maxdep[g[i][j]] == ok) { g[i].push_back(g[i][j]); g[i].erase(g[i].begin() + j); break; } } } 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...