Submission #245382

#TimeUsernameProblemLanguageResultExecution timeMemory
245382Vladikus004Rima (COCI17_rima)C++14
56 / 140
362 ms162840 KiB
#include <bits/stdc++.h> #define inf 2e9 #define all(v) v.begin(), v.end() using namespace std; typedef long long ll; typedef long double ld; typedef pair <int, int> pii; const int N = 500000 + 3; int n; string s[N]; struct node{ int ed, dp[2]; node *next[26]; node(){ ed = dp[0] = dp[1] = 0; for (int i = 0; i < 26; i++) next[i] = nullptr; } }; node *root = new node(); void add(string &s){ node *cur = root; for (auto u: s){ if (cur->next[u - 'a'] == nullptr) cur->next[u - 'a'] = new node; cur = cur->next[u - 'a']; } cur->ed++; } int ans = 0; void dfs(node *cur){ for (int i = 0; i < 26; i++){ if (cur->next[i] == nullptr) continue; dfs(cur->next[i]); if (cur->ed) cur->dp[0] += cur->next[i]->dp[0]; else cur->dp[1] += cur->next[i]->dp[0]; } cur->dp[0] += cur->ed; ans = max(ans, cur->dp[0] + cur->dp[1]); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); #ifdef LOCAL freopen("input.txt", "r", stdin); #endif // LOCAL cin >> n; for (int i = 0; i < n; i++) { cin >> s[i]; reverse(all(s[i])); add(s[i]); } dfs(root); cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...