ps:problems:boj:16163
목차
#15164번_제보
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 16163 |
문제명 | #15164번_제보 |
레벨 | 플래티넘 5 |
분류 |
Manacher |
시간복잡도 | O(n) |
인풋사이즈 | n<2,000,000 |
사용한 언어 | Python |
제출기록 | 196816KB / 3820ms |
최고기록 | 3820ms |
해결날짜 | 2021/07/06 |
풀이
- 문제 설명을 보면 15927번과 16161번 문제에 대해 언급을 하고 있긴 한데.. 제목에서 언급된 15164번은 이 문제와는 전혀 관계가 없는 문제이다.. 어떤 사연인지 모르겠다.
- 문제 설명에서 대놓고 말하듯, M어쩌구 (=Manacher's algorithm) 를 써서 팰린드롬 반경을 모두 구하면, 회문의 갯수는 그것들의 합으로 바로 계산된다. Manacher's algorithm으로 팰린드롬 반경을 모두 구하는 데에 O(n), 그것들을 모두 더하는 것도 O(n), 총 시간복잡도는 O(n)이다
코드
"""Solution code for "BOJ 16163. #15164번_제보".
- Problem link: https://www.acmicpc.net/problem/16163
- Solution link: http://www.teferi.net/ps/problems/boj/16163
Tags: [Manacher]
"""
from teflib import string
def main():
text = input()
radiuses = string.palindrome_radiuses(f"#{'#'.join(text)}#")
print(sum((r + 1) // 2 for r in radiuses))
if __name__ == '__main__':
main()
- Dependency: teflib.string.palindrome_radiuses
ps/problems/boj/16163.txt · 마지막으로 수정됨: 2021/07/11 14:48 저자 teferi
토론