ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 16880 |
문제명 | 룩, 비숍, 킹, 나이트, 궁전 게임 |
레벨 | 다이아몬드 5 |
분류 |
스프라그-그런디 정리 |
시간복잡도 | O(n) |
인풋사이즈 | n<=300,000 |
사용한 언어 | Python |
제출기록 | 30840KB / 432ms |
최고기록 | 432ms |
해결날짜 | 2022/07/04 |
. . . . . . . . . . . . . . . . . . 1 2 1 2 1 2 3 2 . . 0 3 0 3 0 1 0 1 . . 1 2 1 2 3 2 3 2 . . 0 3 0 1 0 1 0 1 . . 1 2 3 2 3 2 3 2 . . 0 1 0 1 0 1 0 1 . .
. . . . . . . . . . . . . . . . . . 0 1 2 0 1 1 2 2 . . 0 1 2 0 0 1 1 1 . . 0 1 1 0 0 0 0 0 . . 0 1 1 1 2 2 2 2 . . 0 0 1 1 1 1 1 1 . . 0 0 0 0 0 0 0 0 . .
"""Solution code for "BOJ 16880. 룩, 비숍, 킹, 나이트, 궁전 게임".
- Problem link: https://www.acmicpc.net/problem/16880
- Solution link: http://www.teferi.net/ps/problems/boj/16880
Tags: [Sprague-Grundy]
"""
import sys
def main():
N = int(sys.stdin.readline())
grundy_num = 0
for _ in range(N):
x, y, c = sys.stdin.readline().split()
x, y = int(x), int(y)
if c == 'R':
grundy = x ^ y
elif c == 'B':
grundy = min(x, y)
elif c == 'K':
grundy = abs(x - y) % 2 + min(x, y) % 2 * 2
elif c == 'N':
m = min(x, y) % 3
grundy = (m - 1) if abs(x - y) < m else m
elif c == 'P':
grundy = ((x // 3) ^ (y // 3)) * 3 + (x + y) % 3
grundy_num ^= grundy
print('koosaga' if grundy_num else 'cubelover')
if __name__ == '__main__':
main()