Submission #674036

#TimeUsernameProblemLanguageResultExecution timeMemory
674036Hacv16Type Printer (IOI08_printer)C++17
100 / 100
92 ms55508 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; const int MAX = 5e5 + 15; const int ALP = 30; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; #define pb push_back #define sz(x) (int) x.size() #define fr first #define sc second #define mp make_pair #define all(x) x.begin(), x.end() #define dbg(x) cerr << #x << ": " << "[ " << x << " ]\n" int n, trie[MAX][ALP], mark[MAX], cnt, numWords; bool fim[MAX]; string Maxs; vector<char> ans; void Add(string& s){ int cur = 0; for(int i = 0; i < sz(s); i++){ int id = s[i] - 'a'; if(trie[cur][id] == 0) trie[cur][id] = ++cnt; cur = trie[cur][id]; } fim[cur] = true; } void Done(){ cout << sz(ans) << '\n'; for(auto c : ans) cout << c << '\n'; exit(0); } void Traverse(string& s){ int cur = 0; for(int i = 0; i < sz(s); i++){ int id = s[i] - 'a'; cur = trie[cur][id]; mark[cur] = true; } } void dfs(int u, char c = '*', bool f = false){ if(f) ans.pb(c); if(fim[u]) ans.pb('P'), numWords++; if(numWords == n) Done(); int left = -1; char aux = '*'; for(char c = 'a'; c <= 'z'; c++){ int id = c - 'a'; if(trie[u][id] == 0) continue; if(mark[trie[u][id]]) left = trie[u][id], aux = c; else dfs(trie[u][id], c, true); } if(left != -1) dfs(left, aux, true); if(f) ans.pb('-'); } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 0; i < n; i++){ string s; cin >> s; Add(s); if(sz(s) > sz(Maxs)) Maxs = s; } Traverse(Maxs); dfs(0); 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...