Submission #583863

#TimeUsernameProblemLanguageResultExecution timeMemory
583863MilosMilutinovicRima (COCI17_rima)C++14
28 / 140
447 ms102788 KiB
/** * author: wxhtzdy * created: 26.06.2022 12:34:37 **/ #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<string> s(n); for (int i = 0; i < n; i++) { cin >> s[i]; reverse(s[i].begin(), s[i].end()); } sort(s.begin(), s.end(), [&](string a, string b) { if (a.size() != b.size()) { return a.size() < b.size(); } else { return a < b; } }); vector<vector<int>> trie(1, vector<int>(26, -1)); vector<int> dp(1, 0); for (int i = 0; i < n; i++) { int p = 0, f = 0; int mx = 0; int sz = (int) s[i].size(); if (sz == 1) { mx = dp[0]; } for (int j = 0; j < sz; j++) { int c = (int) (s[i][j] - 'a'); if (trie[p][c] == -1) { trie[p][c] = (int) trie.size(); trie.push_back(vector<int>(26, -1)); dp.push_back(0); } p = trie[p][c]; if (j == sz - 2) { f = p; } if (j + 2 >= sz) { mx = max(mx, dp[p]); } } dp[f] = max(dp[f], mx + 1); dp[p] = max(dp[p], mx + 1); } cout << *max_element(dp.begin(), dp.end()) << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...