목차

팰린드롬?

ps
링크acmicpc.net/…
출처BOJ
문제 번호10942
문제명팰린드롬?
레벨골드 3
분류

DP

시간복잡도O(n^2 + m)
인풋사이즈n<=2,000, m<=1,000,000
사용한 언어Python
제출기록29200KB / 1616ms
최고기록1452ms
해결날짜2021/06/03

풀이

코드

"""Solution code for "BOJ 10942. 팰린드롬?".

- Problem link: https://www.acmicpc.net/problem/10942
- Solution link: http://www.teferi.net/ps/problems/boj/10942
"""

import sys


def main():
    N = int(sys.stdin.readline())
    nums = [int(x) for x in sys.stdin.readline().split()]

    max_odd_lengths = []
    for i in range(N):
        max_len = -1
        for l, r in zip(nums[i:], reversed(nums[:i + 1])):
            if l != r:
                break
            max_len += 2
        max_odd_lengths.append(max_len)
        
    max_even_lengths = []
    for i in range(N - 1):
        max_len = 0
        for l, r in zip(nums[i + 1:], reversed(nums[:i + 1])):
            if l != r:
                break
            max_len += 2
        max_even_lengths.append(max_len)

    M = int(sys.stdin.readline())
    for _ in range(M):
        S, E = [int(x) for x in sys.stdin.readline().split()]
        length = E - S + 1
        max_length = (max_odd_lengths[(S + E) // 2 - 1] if length % 2
                      else max_even_lengths[(S + E) // 2 - 1])
        print('1' if length <= max_length else '0')


if __name__ == '__main__':
    main()