Submission #1185946

#TimeUsernameProblemLanguageResultExecution timeMemory
1185946NoboritaType Printer (IOI08_printer)C++20
100 / 100
106 ms99160 KiB
#include <bits/stdc++.h> using namespace std; #define LOCAL #define L(i, j, n) for (int i = (j); i < (int)n; i ++) #define LI(i, j, n) for (int i = (j); i <= (int)n; i ++) #define R(i, j, n) for (int i = (j); i > (int)n; i --) #define RI(i, j, n) for (int i = (j); i >= (int)n; i --) #define SZ(x) int((x).size()) #define ALL(x) begin(x),end(x) #define IS_IN(x, v) ((x).find(v) != (x).end()) #define vec vector #define pb push_back using ll = long long; using ld = long double; using pii = pair<int, int>; using pil = pair<int, ll>; using pli = pair<ll, int>; using pll = pair<ll, ll>; const int N = (int)2e5+5; const int MOD = (int)1e9 + 7; const int oo = (int)1e9; vec<char> sol; struct trie{ trie* ch[26]; int height; // int dp[26]; bool eee; trie(){ eee=0; height=0; L(i,0,26){ ch[i]=0; // dp[i]=-oo; } } void insert(string &s, int i){ if (SZ(s) == i){ eee = 1; // dp[i] = max(1, dp[i]); height = max(height, 1); // cout << "H: " << height << "\n"; return; } int id = s[i] - 'a'; if (ch[id]==0) ch[id] = new trie; ch[id]->insert(s, i + 1); height = max(height, ch[id]->height + 1); // dp[id] = max(height + 1, height); } void insert(string &s){ trie*cur=this; for(char c:s){ int id=c-'a'; if(cur->ch[id]==0)cur->ch[id]=new trie; cur=cur->ch[id]; } cur->eee = 1; } void print(){ if (eee){ sol.pb('P'); } vec<pii> ord; L(i,0,26){ if (ch[i] != 0){ ord.pb({ch[i]->height, i}); } } if (SZ(ord)) sort(ALL(ord)); for (auto &[f,s]:ord) { sol.pb(char('a'+s)); // cout << s << " -> " << f << "\n"; ch[s]->print(); sol.pb('-'); } } } *root; void solve() { int n; cin >> n; root = new trie; L(i,0,n){ string s; cin >> s; root->insert(s, 0); } // cout << "PrePrint" << endl; root->print(); // cout << "PosPrint" << endl; while(!sol.empty() && sol.back()=='-') sol.pop_back(); cout << SZ(sol) << endl; for(char c: sol){ cout << c << '\n'; } } int main() { ios::sync_with_stdio(0);cin.tie(0); int TT = 1; //cin >> TT; while (TT--) { 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...