반응형
문제 출처 :
https://www.acmicpc.net/problem/13275
알고리즘 분석 :
문제 해결에 필요한 사항
1. manacher 알고리즘 :: http://www.crocus.co.kr/1075
위의 알고리즘을 공부하고 어떻게 구현하는지 파악한다면 이 문제를 쉽게 O(n)에 해결 할 수 있다.
소스 코드 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <iostream> #include <cstdio> #include <algorithm> #include <string> using namespace std; const int MAXN = 100001 * 2; string tmp, str; int A[MAXN]; void manachers(string S, int N) { int r = 0, p = 0; for (int i = 0; i < N; i++) { if (i <= r) A[i] = min(A[2 * p - i], r - i); else A[i] = 0; while (i - A[i] - 1 >= 0 && i + A[i] + 1 < N && S[i - A[i] - 1] == S[i + A[i] + 1]) A[i]++; if (r < i + A[i]) { r = i + A[i]; p = i; } } } int main() { cin >> tmp; int len = tmp.size(); for (int i = 0; i < len; i++) { str += '#'; str += tmp[i]; } str += '#'; manachers(str, str.size()); len = str.size(); int ans = -1; for (int i = 0; i < len; i++) ans = max(ans, A[i]); printf("%d", ans); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[14911번] 궁합 쌍 찾기 (0) | 2018.05.07 |
---|---|
[10174번] 팰린드롬 (2) | 2018.05.04 |
[11008번] 복붙의 달인 (0) | 2018.05.01 |
[15686번] 치킨 배달 (0) | 2018.04.30 |
[15685번] 드래곤 커브 (0) | 2018.04.28 |