Submission #245700

#TimeUsernameProblemLanguageResultExecution timeMemory
245700VimmerRima (COCI17_rima)C++14
0 / 140
309 ms262148 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("-O3") //#pragma GCC optimize("Ofast") //#pragma GCC optimize("fast-math") //#pragma GCC optimize("no-stack-protector") #define F first #define S second #define sz(x) int(x.size()) #define pb push_back #define N 3000001 #define M ll(998244353) #define inf 1e9 + 1e9 using namespace std; //using namespace __gnu_pbds; typedef long double ld; typedef long long ll; typedef short int si; typedef array <int, 3> a3; //typedef tree <int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; int nxt[N][26], id = 1, kl[N], ans = 0; void add(int v, string &s, int i) { if (i == sz(s)) {kl[v]++; return;} int c = s[i] - 'a'; if (nxt[v][c] == 0) nxt[v][c] = ++id; add(nxt[v][c], s, i + 1); } int dfs(int v) { int sum = 0; vector <int> vr; vr.clear(); for(int i = 0; i < 26; i++) { int it = nxt[v][i]; if (it == -1) continue; int sm = dfs(it); vr.pb(sm); sum += kl[it]; } sort(vr.rbegin(), vr.rend()); int smr = 0; for (int i = 0; i < min(2, sz(vr)); i++) smr += vr[i]; ans = max(ans, kl[v] + smr + sum); return (sz(vr) == 0 ? 0 : vr[0]) + sum; } int main() { //freopen("input.txt", "r", stdin); //freopen("output4.txt", "w", stdout); ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector <string> g(n); for (int i = 0; i < n; i++) { cin >> g[i]; string st = ""; for (int j = sz(g[i]) - 1; j >= 0; j--) st += g[i][j]; add(1, st, 0); g[i] = st; } dfs(1); cout << ans << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...