Submission #390056

#TimeUsernameProblemLanguageResultExecution timeMemory
390056vonatlusPalindromes (APIO14_palindrome)C++14
23 / 100
1093 ms19904 KiB
/// adil sultanov | vonat1us #pragma GCC optimize("O3") //#pragma comment(linker, "/STACK:36777216") #include<bits/stdc++.h> #define x first #define y second #define pb push_back #define sz(x) (int) x.size() #define all(z) (z).begin(), (z).end() using namespace std; using ll = long long; using pii = pair<int, int>; const int MOD = 1e9 + 7; const int INF = 1e9 + 1e2; void fin() { #ifdef AM freopen(".in", "r", stdin); #endif } const bool flag = 0; const int N = 1e5+10; const int p = 31; ll h[N], hr[N], po[N]; int mult(int a, int b) { return a*1ll*b % MOD; } void ma1n() { string s; cin >> s; int n = sz(s); po[0] = 1; for (int i = 1; i <= n; ++i) { po[i] = mult(po[i-1], p); } for (int i = 0; i < n; ++i) { h[i+1] = (h[i]*p + s[i]) % MOD; } reverse(all(s)); for (int i = 0; i < n; ++i) { hr[i+1] = (hr[i]*p + s[i]) % MOD; } auto get = [&](int l, int r, int t) { if (t) { r = n-r+1; l = n-l+1; swap(l, r); return (hr[r] - mult(hr[l-1], po[r-l+1]) + MOD) %MOD; } else { return (h[r] - mult(h[l-1], po[r-l+1]) + MOD) %MOD; } }; unordered_map<int, int> cnt; for (int i = 1; i <= n; ++i) { for (int j = i; j <= n; ++j) { cnt[get(i, j, 0)]++; } } ll ans = 0; for (int i = 1; i <= n; ++i) { for (int j = i; j <= n; ++j) { if (get(i, j, 0) == get(i, j, 1)) { ans = max(ans, cnt[get(i, j, 0)] * 1ll * (j-i+1)); } } } cout << ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(nullptr), fin(); int ts = 1; if (flag) { cin >> ts; } while (ts--) { ma1n(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...