목차

Circular Barn

ps
링크acmicpc.net/…
출처BOJ
문제 번호26973
문제명Circular Barn
레벨플래티넘 3
분류

게임 이론

시간복잡도O(n + mloglogm)
인풋사이즈n<=2*10^5, m<=5*10^6
사용한 언어Python 3.11
제출기록166312KB / 712ms
최고기록712ms
해결날짜2023/06/23

풀이

코드

"""Solution code for "BOJ 26973. Circular Barn".

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

Tags: [game theory]
"""

import sys
from teflib import numtheory


def main():
    T = int(sys.stdin.readline())
    a_list = []
    for _ in range(T):
        N = int(sys.stdin.readline())  # pylint: disable=unused-variable
        a = [int(x) for x in sys.stdin.readline().split()]
        a_list.append(a)

    max_a = max(max(a) for a in a_list)
    turn_count = [None] * (max_a + 1)
    turn_count[0] = 1
    turn_count[1] = 1
    for p in numtheory.prime_list(max_a):
        turn_count[p] = 1
    for t in range(3, max_a + 1):
        if turn_count[t] is None:
            turn_count[t] = turn_count[t - 4] + 1

    for a in a_list:
        argmin_a = min(a, key=turn_count.__getitem__)
        print('Farmer John' if argmin_a % 4 != 0 else 'Farmer Nhoj')


if __name__ == '__main__':
    main()