Submission #1304456

#TimeUsernameProblemLanguageResultExecution timeMemory
1304456muhammad-ahmadType Printer (IOI08_printer)C++20
0 / 100
42 ms10824 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int N = 25e3 + 5; int v = 0, trie[N][26], C[N], ch[N][26]; vector<char> ans; void add(string s){ int cur = 0, n = s.size(); for (int i = 0; i < n; i++){ if (!trie[cur][s[i] - 'a']) { trie[cur][s[i] - 'a'] = ++v; ch[cur][s[i] - 'a'] = s[i]; } cur = trie[cur][s[i] - 'a']; } C[cur]++; } void dfs(int u = 0){ while(C[u] > 0){ ans.push_back('P'); C[u]--; } for (int i = 0; i < 26; i++){ if (trie[u][i]){ ans.push_back(ch[u][i]); dfs(trie[u][i]); ans.push_back('-'); } } } signed main(){ int n; cin >> n; string longest; for (int i = 1; i <= n; i++){ string s; cin >> s; add(s); if (s.size() > longest.size()) longest = s; } int cur = 0; for (int i = 0; i < (int) longest.size(); i++){ int num = longest[i] - 'a'; swap(trie[cur][num], trie[cur][25]); swap(ch[cur][num], ch[cur][25]); cur = trie[cur][25]; } dfs(); while (ans.size() && ans.back() == '-') ans.pop_back(); cout << ans.size() << endl; for (auto i : ans) cout << i << endl; cout << endl; }
#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...