Submission #1199427

#TimeUsernameProblemLanguageResultExecution timeMemory
1199427TahirAliyevType Printer (IOI08_printer)C++20
100 / 100
113 ms99248 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int, int> #define all(v) v.begin(), v.end() const int oo = 1e9 + 9; const int MAX = 25000 + 5; int t[30 * MAX][26]; int D[30 * MAX]; int cnt[30 * MAX]; int nxt = 2; void add(string &s){ int node = 1; for(int i = 0; i < s.size(); i++){ D[node] = max((int)s.size() - i, D[node]); if(!t[node][s[i]-'a']) t[node][s[i]-'a'] = nxt++; node = t[node][s[i]-'a']; } cnt[node]++; } string ans = ""; void dfs(int node){ if(cnt[node]) ans += 'P'; vector<pii> v; for(int i = 0; i < 26; i++){ if(!t[node][i]) continue; v.push_back({D[t[node][i]], i}); } sort(all(v)); for(auto [d, c] : v){ ans += ('a' + c); dfs(t[node][c]); ans += ('-'); } } void solve(){ int n; cin >> n; for(int i = 1; i <= n; i++){ string s; cin >> s; add(s); } dfs(1); while(ans.back() == '-') ans.pop_back(); cout << ans.size() << '\n'; for(char c : ans) cout << c << '\n'; } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; // cin >> t; while(t--) solve(); }
#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...