아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

도미노 게임

시간 제한1초메모리 제한64 MB

요약
도미노 n개의 위치가 주어질 때, 한 번의 이동으로 연속한 도미노 사슬이 쓰러지는 게임에서 후공이 이기도록 하는 높이 h'를 [hmin,hmax]에서 골라 최솟값을 구하거나, 없으면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
게임 이론, 정렬, 그리디, 이분 탐색
정답자
아직 제출이 없습니다

문제

길이가 같은 nn개의 도미노가 일직선으로 놓여 있다. 도미노의 높이는 hh이고 hmin⁡≤h≤hmax⁡h_{\min} \le h \le h_{\max}를 만족한다. ii번째 도미노는 위치 aia_i에 놓여 있다.

Lobster와 Mobster는 다음 게임을 한다. 두 사람은 번갈아 가며 도미노를 넘어뜨린다. 자기 차례가 된 사람은 도미노 하나를 골라 왼쪽이나 오른쪽으로 넘어뜨린다. 넘어진 도미노는 다른 도미노를 연쇄적으로 넘어뜨릴 수 있다.

한 도미노가 다른 도미노를 넘어뜨릴 수 있는 것은 두 도미노 사이의 거리, 즉 위치의 차가 hh보다 엄격히 작을 때뿐이다. 예를 들어 도미노 ii의 위치가 aia_i이고 도미노 ii보다 오른쪽에 있는 도미노 jj의 위치가 aja_j이며 aj−ai<ha_j - a_i < h이면, 오른쪽으로 넘어뜨린 도미노 ii는 도미노 jj도 넘어뜨린다. 그러면 도미노 jj가 다음 도미노를 넘어뜨릴 수 있고, 연쇄의 마지막 도미노가 다음 도미노에 닿지 못할 때까지 이어진다.

모든 도미노가 넘어지면 게임이 끝난다. 마지막 도미노를 넘어뜨린 사람이 이기고, 자기 차례에 넘어뜨릴 도미노가 없어서 넘어뜨리지 못한 사람이 진다.

Lobster가 먼저 두기 때문에 Lobster가 유리하다. 그래서 게임을 시작하기 전에 Mobster는 마법 주문을 사용해 모든 도미노의 높이를 hh에서 Mobster가 [hmin⁡,hmax⁡][h_{\min}, h_{\max}] 범위에서 고른 임의의 수 h′h'으로 바꿀 수 있다.

두 사람이 최적으로 플레이할 때, Mobster가 승리하게 되는 도미노 높이 h′h'의 최솟값을 구하라. 어떤 h′h'으로도 Mobster가 이길 수 없다면 그 사실을 판정하라.

입력

첫째 줄에 정수 nn, hmin⁡h_{\min}, hmax⁡h_{\max}가 주어진다. (1≤n≤1051 \le n \le 10^5, 1≤hmin⁡≤hmax⁡≤1091 \le h_{\min} \le h_{\max} \le 10^9)

둘째 줄에 nn개의 정수가 주어진다. ii번째 수는 ii번째 도미노의 위치 aia_i이다. (−109≤ai≤109-10^9 \le a_i \le 10^9) 모든 도미노의 위치는 서로 다르다.

출력

Mobster가 승리하게 되는 최소 높이 h′h'을 출력한다. [hmin⁡,hmax⁡][h_{\min}, h_{\max}] 범위의 어떤 h′h'에 대해서도 Mobster가 진다면 "-1"을 출력한다.

예제1

  1. 예제 1

    입력
    10 2 5
    20 2 22 -4 0 -5 12 5 10 -9
    
    예상 출력
    3