목차

Game with Dominoes

ps
링크acmicpc.net/…
출처BOJ
문제 번호23540
문제명Game with Dominoes
레벨플래티넘 2
분류

게임이론

시간복잡도O(nlogn)
인풋사이즈n<=10^5
사용한 언어Python 3.13
제출기록56604KB / 296ms
최고기록296ms
해결날짜2025/02/23

풀이

코드

"""Solution code for "BOJ 23540. Game with Dominoes".

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

Tags: [game theory]
"""

import collections
import itertools
from teflib import disjointset


def main():
    n, h_min, h_max = [int(x) for x in input().split()]
    a = [int(x) for x in input().split()]

    dsu = disjointset.DisjointSet(n)
    inds_by_dist = collections.defaultdict(list)
    grundy = n % 2
    for i, (l, r) in enumerate(itertools.pairwise(sorted(a))):
        if r - l < h_min:
            s1, s2 = dsu.size(i), dsu.size(i + 1)
            grundy ^= s1 ^ s2 ^ (s1 + s2)
            dsu.union(i, i + 1)
        elif r - l < h_max:
            inds_by_dist[r - l].append(i)
    if grundy == 0:
        print(h_min)
        return

    answer = -1
    for h, inds in sorted(inds_by_dist.items()):
        for i in inds:
            s1, s2 = dsu.size(i), dsu.size(i + 1)
            grundy ^= s1 ^ s2 ^ (s1 + s2)
            dsu.union(i, i + 1)
        if grundy == 0:
            answer = h + 1
            break

    print(answer)


if __name__ == '__main__':
    main()