사용자 도구

사이트 도구


ps:problems:boj:18540

Scored Nim

ps
링크acmicpc.net/…
출처BOJ
문제 번호18540
문제명Scored Nim
레벨골드 1
분류

게임 이론

시간복잡도O(n)
인풋사이즈n<=128
사용한 언어Python 3.11
제출기록31256KB / 44ms
최고기록40ms
해결날짜2023/07/08

풀이

  • 1개짜리 힙을 만들면, 그 힙의 색깔은 이후에 변하지 않는 확정적인 점수가 된다.
  • n개짜리 힙 한개를 분할하기 시작하면, 어떤 식으로 분할하든 n-1턴 이후에 모든 분할이 끝난다. 자기턴에 확정점수를 최대 1점 만들수 있다. x개 힙을 1개 힙과 x-1개 힙으로 나누면 된다. 이것이 최적 행동이다.
  • 둘다 최적전략을 쓰면, 짝수개짜리 힙은 선후공이 똑같이 나눠갖게 되고, 홀수개짜리 힙은 선공이 1점 더 많이 갖게 된다.
  • 힙이 여러개라면, +1점을 얻을수 있는 홀수개짜리 힙이 짝수개라면, 선후공이 똑같은 갯수마다 +1을 받으므로 총점은 똑같이 나눠갖는다. 홀수개짜리 힙이 홀수개라면, 선공이 최종적으로 1점을 더 얻는다
  • 좀더 일반화하면, 모든 힙의 돌의 합이 홀수라면 선공이 1점더 얻고, 짝수면 비긴다. 선공의 점수는 ceil(sum(a_i)/2) 이다

코드

"""Solution code for "BOJ 18540. Scored Nim".

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

Tags: [game theory]
"""


def main():
    n = int(input())  # pylint: disable=unused-variable
    a = [int(x) for x in input().split()]
    print((sum(a) + 1) // 2)


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
N P R H J
 
ps/problems/boj/18540.txt · 마지막으로 수정됨: 2023/07/08 11:43 저자 teferi