Submission #1136370

#TimeUsernameProblemLanguageResultExecution timeMemory
1136370spacecowboyType Printer (IOI08_printer)C++20
100 / 100
119 ms50520 KiB
#include <bits/stdc++.h> using namespace std; #define all(v) v.begin(), v.end() #define pb push_back #define fi first #define se second #define INF INT_MAX/2 typedef long long ll; typedef pair<int,int> pii; typedef vector<int> vi; /* Problem: Type Printer Topic: Strings, Trie practice Source: https://oj.uz/problem/view/IOI08_printer */ const int N = 500'005; //Number of nodes const int ALPHA = 26; // Number of characters int trie[N][ALPHA]; int max_dist[N]; set<int> final_s; int last_n = 0; vector<char> ans; void is_already(string &s){ int curr_node = 0; int sz = s.size(); for(char it: s){ if(trie[curr_node][it-'a'] == 0){ trie[curr_node][it-'a'] = ++last_n; } max_dist[curr_node] = max(max_dist[curr_node], sz--); curr_node = trie[curr_node][it-'a']; } final_s.insert(curr_node); } void solve(int node){ set<pii> dist; for(int i=0; i < 26; i++){ if(trie[node][i] != 0){ dist.insert({max_dist[trie[node][i]], i}); } } if(final_s.count(node)) ans.pb('P'); for(auto d: dist){ ans.pb(d.second+'a'); solve(trie[node][d.second]); } ans.pb('-'); } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n; string s; cin >> n; while(n--){ cin >> s; is_already(s); } solve(0); for(int i=ans.size()-1; i >=0; i--){ if(ans[i] == '-') ans.pop_back(); else break; } cout << ans.size() << "\n"; for(char c: ans){ cout << c << "\n"; } 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...