제출 #1168435

#제출 시각아이디문제언어결과실행 시간메모리
1168435nuutsnoyntonType Printer (IOI08_printer)C++20
0 / 100
53 ms48824 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const ll M = 2e6 + 2; const ll N = 3e4 + 2; ll trie[M][26]; ll cur_node = 0; set < ll > S[N]; void add_string(string str, ll ind) { ll node = 0; for ( char ch : str) { if ( trie[node][ch - 'a'] == 0) trie[node][ch - 'a'] = ++cur_node; node = trie[node][ch - 'a']; S[ind].insert(node); } } int main() { ll n, m, r, x, y, i, p, j, ans, t; cin >> n; string str[n + 2]; for (i = 1; i <= n; i ++) { cin >> str[i]; } sort(str + 1, str + n + 1); reverse(str + 1, str + n + 1); for (i = 1; i <= n; i ++) { add_string(str[i], i); } vector < ll > Ans; for (j = 0; j < str[1].size(); j ++) Ans.push_back(str[1][j] - 'a'); Ans.push_back(26); for (i = 2; i <= n; i ++) { ll node = 0; for (j = 0; j < str[i - 1].size(); j ++) { node = trie[node][str[i - 1][j] - 'a']; if ( S[i].find(node) == S[i].end()) break; } r = str[i - 1].size()- j - 1; p =j; while ( r --) Ans.push_back(-1); for (j =p; j < str[i].size(); j ++) { Ans.push_back(str[i][j] - 'a'); } Ans.push_back(26); } cout << Ans.size() << endl; for (i = 0; i < Ans.size(); i ++) { if ( Ans[i] == -1) cout << "-\n"; else { if ( Ans[i] == 26) cout << "P\n"; else cout<< char(Ans[i] + 'a') << "\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...