Submission #1186582

#TimeUsernameProblemLanguageResultExecution timeMemory
1186582MamedovType Printer (IOI08_printer)C++17
100 / 100
84 ms48452 KiB
#pragma GCC optimize ("O3") #include <bits/stdc++.h> #define pii pair<int, int> #define piii pair<pii, int> #define vi vector<int> #define vvi vector<vi> #define vpii vector<pii> #define vvpii vector<vpii> #define f first #define s second #define oo 1000000001 #define eb emplace_back #define pb push_back #define mpr make_pair #define size(v) (int)v.size() #define ln '\n' #define ull unsigned long long #define ll long long #define all(v) v.begin(), v.end() using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int MAX = 5e5; int trie[MAX][26]; int8_t depth[MAX]; bool isEnd[MAX]; int nxt = 0; void add(string &s) { int node = 0; int8_t len = size(s); for (char c : s) { if (trie[node][c - 'a']) { node = trie[node][c - 'a']; depth[node] = max(depth[node], len); } else { node = trie[node][c - 'a'] = ++nxt; depth[node] = len; } } isEnd[node] = true; } string traverse(int node) { string res = ""; if (isEnd[node]) res += 'P'; int imaxDep = -1; for (int i = 0; i < 26; ++i) { if (trie[node][i] && (imaxDep == -1 || depth[trie[node][i]] > depth[trie[node][imaxDep]])) { imaxDep = i; } } if (imaxDep != -1) { for (int i = 0; i < 26; ++i) { if (i != imaxDep && trie[node][i]) { res += ('a' + i); res += traverse(trie[node][i]); res += '-'; } } res += ('a' + imaxDep); res += traverse(trie[node][imaxDep]); res += '-'; } return res; } void solve() { int n; cin >> n; string s; for (int i = 0; i < n; ++i) { cin >> s; add(s); } string res = traverse(0); while (res.back() == '-') res.pop_back(); cout << size(res) << ln; for (char c : res) { cout << c << ln; } } int main() { ios_base::sync_with_stdio(false); 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...