#pragma GCC optimize("O2")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("avx,avx2,sse,sse2,ssse3,tune=native")
#include<bits/stdc++.h>
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
using namespace std;
using ll = long long;
//using arr = array;
using pi = pair<int, int>;
using vi = vector<int>;
using vpi = vector<pi>;
using ld = long double;
//#include<bits/extc++.h>
//using namespace __gnu_pbds;
//using oset = tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>;
const int maxn = 1<<18, mod = (119<<23)+1, lg = 18;
int link[maxn], to[maxn][26], len[maxn], occ[maxn], sz, cur;
string s;
void init() {
sz = 2;
cur = 0;
memset(link, 0, sizeof link);
memset(len, 0, sizeof len);
memset(to, 0, sizeof to);
len[0] = -1;
}
int get_link(int v) {
while((int)s.size()-len[v]-2<0 || s[s.size()-len[v]-2]!=s.back()) v = link[v];
return v;
}
void add(char c) {
s += c, c -= 'a';
cur = get_link(cur);
if(!to[cur][c]) {
to[cur][c] = sz;
link[sz] = cur ? to[get_link(link[cur])][c] : 1;
len[sz] = len[cur]+2;
sz++;
}
cur = to[cur][c];
occ[cur]++;
}
vi g[maxn];
ll ans = 0;
ll dfs(int v) {
ll cnt = occ[v];
for(auto i : g[v]) {
cnt += dfs(i);
}
if(len[v] > 0) ans = max(len[v] * 1ll * cnt, ans);
return cnt;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string s;
cin >> s;
init();
for(auto &i : s) add(i);
for(int i = 1; i < sz; i++) g[link[i]].pb(i);
dfs(0);
cout << ans << '\n';
}
Compilation message
palindrome.cpp: In function 'void add(char)':
palindrome.cpp:37:15: warning: array subscript has type 'char' [-Wchar-subscripts]
if(!to[cur][c]) {
^
palindrome.cpp:38:12: warning: array subscript has type 'char' [-Wchar-subscripts]
to[cur][c] = sz;
^
palindrome.cpp:39:45: warning: array subscript has type 'char' [-Wchar-subscripts]
link[sz] = cur ? to[get_link(link[cur])][c] : 1;
^
palindrome.cpp:43:17: warning: array subscript has type 'char' [-Wchar-subscripts]
cur = to[cur][c];
^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
23 ms |
35200 KB |
Output is correct |
2 |
Correct |
23 ms |
35200 KB |
Output is correct |
3 |
Correct |
23 ms |
35200 KB |
Output is correct |
4 |
Correct |
23 ms |
35200 KB |
Output is correct |
5 |
Correct |
24 ms |
35200 KB |
Output is correct |
6 |
Correct |
24 ms |
35200 KB |
Output is correct |
7 |
Correct |
24 ms |
35200 KB |
Output is correct |
8 |
Correct |
23 ms |
35200 KB |
Output is correct |
9 |
Correct |
24 ms |
35200 KB |
Output is correct |
10 |
Correct |
24 ms |
35200 KB |
Output is correct |
11 |
Correct |
24 ms |
35200 KB |
Output is correct |
12 |
Correct |
23 ms |
35192 KB |
Output is correct |
13 |
Correct |
23 ms |
35200 KB |
Output is correct |
14 |
Correct |
23 ms |
35200 KB |
Output is correct |
15 |
Correct |
23 ms |
35200 KB |
Output is correct |
16 |
Correct |
24 ms |
35200 KB |
Output is correct |
17 |
Correct |
28 ms |
35200 KB |
Output is correct |
18 |
Correct |
24 ms |
35200 KB |
Output is correct |
19 |
Correct |
23 ms |
35200 KB |
Output is correct |
20 |
Correct |
24 ms |
35192 KB |
Output is correct |
21 |
Correct |
25 ms |
35200 KB |
Output is correct |
22 |
Correct |
25 ms |
35200 KB |
Output is correct |
23 |
Correct |
24 ms |
35200 KB |
Output is correct |
24 |
Correct |
23 ms |
35200 KB |
Output is correct |
25 |
Correct |
23 ms |
35200 KB |
Output is correct |
26 |
Correct |
24 ms |
35176 KB |
Output is correct |
27 |
Correct |
24 ms |
35200 KB |
Output is correct |
28 |
Correct |
24 ms |
35200 KB |
Output is correct |
29 |
Correct |
24 ms |
35200 KB |
Output is correct |
30 |
Correct |
23 ms |
35200 KB |
Output is correct |
31 |
Correct |
23 ms |
35200 KB |
Output is correct |
32 |
Correct |
23 ms |
35200 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
24 ms |
35328 KB |
Output is correct |
2 |
Correct |
24 ms |
35328 KB |
Output is correct |
3 |
Correct |
24 ms |
35328 KB |
Output is correct |
4 |
Correct |
24 ms |
35200 KB |
Output is correct |
5 |
Correct |
24 ms |
35328 KB |
Output is correct |
6 |
Correct |
23 ms |
35328 KB |
Output is correct |
7 |
Correct |
23 ms |
35200 KB |
Output is correct |
8 |
Correct |
24 ms |
35328 KB |
Output is correct |
9 |
Correct |
23 ms |
35200 KB |
Output is correct |
10 |
Correct |
24 ms |
35200 KB |
Output is correct |
11 |
Correct |
24 ms |
35200 KB |
Output is correct |
12 |
Correct |
26 ms |
35200 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
28 ms |
35840 KB |
Output is correct |
2 |
Correct |
25 ms |
35712 KB |
Output is correct |
3 |
Correct |
25 ms |
36096 KB |
Output is correct |
4 |
Correct |
26 ms |
35968 KB |
Output is correct |
5 |
Correct |
24 ms |
35456 KB |
Output is correct |
6 |
Correct |
24 ms |
35584 KB |
Output is correct |
7 |
Correct |
24 ms |
35712 KB |
Output is correct |
8 |
Correct |
24 ms |
35328 KB |
Output is correct |
9 |
Correct |
24 ms |
35328 KB |
Output is correct |
10 |
Correct |
24 ms |
35320 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
37 ms |
41336 KB |
Output is correct |
2 |
Correct |
36 ms |
40448 KB |
Output is correct |
3 |
Correct |
36 ms |
43776 KB |
Output is correct |
4 |
Correct |
36 ms |
42112 KB |
Output is correct |
5 |
Correct |
32 ms |
37120 KB |
Output is correct |
6 |
Correct |
31 ms |
37752 KB |
Output is correct |
7 |
Correct |
33 ms |
38912 KB |
Output is correct |
8 |
Correct |
26 ms |
35584 KB |
Output is correct |
9 |
Correct |
28 ms |
37376 KB |
Output is correct |
10 |
Correct |
31 ms |
36772 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
75 ms |
74912 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |