제출 #447848

#제출 시각아이디문제언어결과실행 시간메모리
447848MilosMilutinovicType Printer (IOI08_printer)C++14
100 / 100
162 ms52288 KiB
#include <bits/stdc++.h> #define ll long long #define mp make_pair #define fi first #define se second #define pb push_back #define vi vector<int> #define pi pair<int, int> #define mod 1000000007 template<typename T> bool chkmin(T &a, T b){return (b < a) ? a = b, 1 : 0;} template<typename T> bool chkmax(T &a, T b){return (b > a) ? a = b, 1 : 0;} ll ksm(ll a, ll b) {if (b == 0) return 1; ll ns = ksm(a, b >> 1); ns = ns * ns % mod; if (b & 1) ns = ns * a % mod; return ns;} using namespace std; const int maxn = 25050; const int maxm = maxn * 20; int n; int nxt[maxm][26], tsz; int mx[maxm]; bool ed[maxm]; string s[maxn]; void add(string s) { int node = 0; int sz = (int) s.size(); vi vis; for (int i = 0; i < sz; i++) { int x = (s[i] - 'a'); if (!nxt[node][x]) nxt[node][x] = ++tsz; node = nxt[node][x]; vis.pb(node); } ed[vis.back()] = true; reverse(vis.begin(), vis.end()); for (int i = 0; i < (int) vis.size(); i++) { if (i == 0) mx[vis[i]] = max(mx[vis[i]], 1); else mx[vis[i]] = max(mx[vis[i]], mx[vis[i - 1]] + 1); } } vector<char> ans; void go(int node) { if (ed[node]) ans.pb('P'); vector<pair<int, int>> sl; for (int i = 0; i < 26; i++) { if (nxt[node][i]) { sl.pb(mp(mx[nxt[node][i]], i)); } } sort(sl.begin(), sl.end()); for (auto x : sl) { ans.pb((char) (x.se + 'a')); go(nxt[node][x.se]); ans.pb('-'); } } int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> s[i]; add(s[i]); } go(0); while (!ans.empty() && ans.back() == '-') { ans.pop_back(); } printf("%d\n", (int) ans.size()); for (char c : ans) { printf("%c\n", c); } }
#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...