Submission #399085

#TimeUsernameProblemLanguageResultExecution timeMemory
399085BERNARB01회문 (APIO14_palindrome)C++17
0 / 100
1093 ms2960 KiB
#include <bits/stdc++.h> using namespace std; vector<int> Z(const string& s) { int n = s.size(); vector<int> z(n); int x = 0, y = 0; for (int i = 1; i < n; i++) { z[i] = max(0, min(z[i-x], y-i+1)); while (i+z[i] < n && s[z[i]] == s[i+z[i]]) { x = i; y = i+z[i]; z[i]++; } } return z; } bool pal(const string& s) { string t = s; reverse(t.begin(), t.end()); return s == t; } vector<int> Pals(const string& s) { vector<int> ret(s.length(), 0); for (int i = 0; i < (int) s.length(); i++) { ret[i] = pal(s.substr(i, s.length() - i)); } return ret; } int main() { ios::sync_with_stdio(false); cin.tie(0); //freopen("palindrome.in", "r", stdin); //freopen("palindrome.out", "w", stdout); string s; cin >> s; int n = s.length(); long long res = 0; for (int i = 0; i < n; i++) { string t = s.substr(i, n - i); vector<int> pal = Pals(t); t += '#'; t += s; vector<int> z = Z(t); vector<long long> cnt(n + 1); for (int j = n - i; j < (int) z.size(); j++) { cnt[z[j]]++; } for (int j = i; j < n; j++) { long long len = j - i + 1; if (!pal[j - i]) { continue; } long long ans = cnt[len]; ans *= len; res = max(res, ans); } } cout << res << '\n'; 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...