Submission #226653

#TimeUsernameProblemLanguageResultExecution timeMemory
226653tushar_2658Type Printer (IOI08_printer)C++14
20 / 100
63 ms53496 KiB
#include "bits/stdc++.h" using namespace std; const int maxn = 1000005; string s[maxn]; int t[maxn][26], ed[maxn], cnt[maxn]; int node = 0; int par[maxn]; void insert(string s){ int cur = 0; for(auto c : s){ if(!t[cur][c - 'a']){ t[cur][c - 'a'] = ++node; } par[t[cur][c - 'a']] = cur; cur = t[cur][c - 'a']; } ed[cur] = 1; } vector<char> v; void get(int cur){ cnt[cur] = 1; for(int i = 0; i < 26; ++i){ if(t[cur][i]){ get(t[cur][i]); cnt[cur] = max(cnt[cur], cnt[t[cur][i]] + 1); } } } void dfs(int cur){ if(ed[cur]){ v.push_back('P'); return; } vector<pair<int, int>> vv; for(int i = 0; i < 26; ++i){ if(t[cur][i]){ vv.push_back(make_pair(cnt[t[cur][i]], i)); } } sort(vv.begin(), vv.end()); for(auto i : vv){ v.push_back((char)(i.second + 'a')); dfs(t[cur][i.second]); v.push_back('-'); } } int main(int argc, char const *argv[]) { // freopen("in.txt", "r", stdin); int n; cin >> n; memset(par, -1, sizeof par); for(int i = 0; i < n; ++i){ cin >> s[i]; insert(s[i]); } get(0); dfs(0); while(v.back() == '-')v.pop_back(); cout << v.size() << endl; for(auto i : v){ cout << i << endl; } 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...