제출 #1315181

#제출 시각아이디문제언어결과실행 시간메모리
1315181algoproclubType Printer (IOI08_printer)C++20
0 / 100
46 ms35524 KiB
// UUID: c0020ad8-60cb-4eb2-83ba-cf9f77beedba #include <bits/stdc++.h> using namespace std; vector<vector<int>> trie(2.5e5+1, vector<int>(26, 0)); vector<bool> word_end(2.5e5+1, false); vector<int> utso(2.5e5+1, 0); vector<char>out; int cmt = 1; void add(string word, bool last){ int x = 1; for(char c: word){ int j = c - 'a'; if(!trie[x][j]){ cmt++; trie[x][j] = cmt; } if(last) utso[x] = j; x = trie[x][j]; } word_end[x] = true; } void dfs(int csucs){ if(word_end[csucs]) out.push_back('P'); for(int i = 0; i < 26; i++){ if(utso[csucs] == i || trie[csucs][i] == 0){ continue; } out.push_back(char(i+'a')); dfs(trie[csucs][i]); } if(utso[csucs] != 0){ out.push_back(char(utso[csucs]+'a')); dfs(trie[csucs][utso[csucs]]); } out.push_back('-'); } int main() { int n; cin >> n; string mx_word; for(int i = 0; i < n; i++){ string s; cin >> s; add(s, false); if(s.size() > mx_word.size()){ mx_word = s; } } add(mx_word, true); dfs(1); cout << out.size()-mx_word.size()-1 << "\n"; for(int i = 0; i < out.size()-mx_word.size()-1; i++){ cout << out[i] << "\n"; } }
#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...