# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
240899 | 2020-06-21T12:23:35 Z | SamAnd | Rima (COCI17_rima) | C++17 | 256 ms | 68472 KB |
#include <bits/stdc++.h> using namespace std; #define m_p make_pair #define all(x) (x).begin(),(x).end() #define sz(x) ((int)(x).size()) #define fi first #define se second typedef long long ll; mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); mt19937 rnf(2106); const int N = 3000006; int z; int t[N][26]; bool c[N]; int n; char a[N]; int ans; int dp[N]; void dfs(int x) { int max1 = 0, max2 = 0; int q = 0; for (int i = 0; i < 26; ++i) { int h = t[x][i]; if (!h) continue; dfs(h); if (c[h]) { if (dp[h] >= max1) { max2 = max1; max1 = dp[h]; } else if (dp[h] >= max2) max2 = dp[h]; ++q; } } ans = max(ans, max1 + max2 + q + c[x]); dp[x] = max1 + q; } void solv() { int qq; scanf("%d", &qq); while (qq--) { scanf(" %s", a); n = strlen(a); reverse(a, a + n); int pos = 0; for (int i = 0; i < n; ++i) { if (!t[pos][a[i] - 'a']) t[pos][a[i] - 'a'] = ++z; pos = t[pos][a[i] - 'a']; } c[pos] = true; } dfs(0); printf("%d\n", ans); } int main() { #ifdef SOMETHING freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); #endif // SOMETHING //ios_base::sync_with_stdio(false), cin.tie(0); solv(); return 0; } //while ((double)clock() / CLOCKS_PER_SEC <= 0.9){}
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 384 KB | Output is correct |
2 | Correct | 5 ms | 384 KB | Output is correct |
3 | Correct | 5 ms | 384 KB | Output is correct |
4 | Correct | 256 ms | 68472 KB | Output is correct |
5 | Correct | 34 ms | 3576 KB | Output is correct |
6 | Correct | 59 ms | 56696 KB | Output is correct |
7 | Correct | 58 ms | 56560 KB | Output is correct |
8 | Correct | 57 ms | 56440 KB | Output is correct |
9 | Correct | 87 ms | 60280 KB | Output is correct |
10 | Correct | 60 ms | 56440 KB | Output is correct |