만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

블록 모험

면접 대비

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

요약
기둥 높이들과 가방 속 블록 수, 허용 차이 k가 주어질 때 1번 기둥에서 n번 기둥까지 이동할 수 있는지 판별합니다.
난이도

쉬움10점 중 3점

유형
그리디, 구현
정답자
아직 제출이 없습니다

문제

길동이는 Block Adventure라는 비디오 게임을 하고 있다. 한 줄로 늘어선 nn개의 열에 블록이 쌓여 있고, 열은 1번부터 nn번까지 번호가 붙어 있다. 모든 블록의 높이는 같다. ii번 열의 높이 hih_i는 그 열에 쌓인 블록의 개수다.

길동이는 열의 맨 위에만 설 수 있는 캐릭터를 조작한다. 처음에 캐릭터는 1번 열의 맨 위에 서 있다. 목표는 캐릭터를 nn번 열의 맨 위로 옮기는 것이다.

캐릭터는 블록을 무한히 담을 수 있는 가방을 가지고 있다. 캐릭터가 ii번 열의 맨 위에 있을 때, 길동이는 다음 세 가지 행동을 원하는 만큼 할 수 있다.

  • 열에 블록이 하나 이상 있으면, 맨 위의 블록을 하나 제거해 가방에 넣는다.
  • 가방에 블록이 하나 이상 있으면, 가방에서 블록을 하나 꺼내 ii번 열의 맨 위에 올린다.
  • i<ni<n이고 ∣hi−hi+1∣≤k|h_i-h_{i+1}|\le k이면, 캐릭터를 i+1i+1번 열의 맨 위로 옮긴다. kk는 게임 시작 시 주어지는 음이 아닌 정수다. 캐릭터는 다음 열로만 이동할 수 있다.

앞의 두 행동에서는 캐릭터가 ii번 열에 머물고 hih_i가 바뀐다.

게임 시작 시 캐릭터의 가방에는 블록이 mm개 있다. 길동이가 게임에서 이길 수 있는지 구하라.

입력

첫 줄에 테스트 케이스의 개수 tt (1≤t≤10001\le t\le 1000)가 주어진다. 각 테스트 케이스가 이어진다.

각 테스트 케이스의 첫 줄에는 세 정수 nn, mm, kk (1≤n≤1001\le n\le 100, 0≤m≤1060\le m\le 10^6, 0≤k≤1060\le k\le 10^6)가 주어진다. nn은 열의 개수, mm은 시작 시 가방에 있는 블록의 개수, kk는 문제에서 설명한 값이다.

각 테스트 케이스의 둘째 줄에는 nn개의 정수가 주어진다. ii번째 정수는 ii번 열의 초기 높이 hih_i (0≤hi≤1060\le h_i\le 10^6)이다.

출력

각 테스트 케이스마다 길동이가 게임에서 이길 수 있으면 YES를, 그렇지 않으면 NO를 출력한다. 대소문자는 어느 쪽이든 상관없다.

힌트

첫 번째 경우, 길동이는 1번 열에서 블록을 하나 가져와 2번 열로 이동한 뒤, 그 블록을 2번 열에 올려놓고 3번 열로 이동할 수 있다.

두 번째 경우, 길동이는 2번 열로 가려면 1번 열의 블록을 가방에 넣어야 한다. 그러나 ∣h2−h3∣=3>k|h_2-h_3|=3>k이고 차이를 줄일 방법이 없으므로 3번 열로 갈 수 없다.

다섯 번째 경우, 캐릭터는 시작부터 이미 nn번 열에 있으므로 게임은 즉시 이긴 것이다.

예제1

  1. 예제 1

    입력
    5
    3 0 1
    4 3 5
    3 1 2
    1 4 7
    4 10 0
    10 20 10 20
    2 5 5
    0 11
    1 9 9
    99
    
    예상 출력
    YES
    NO
    YES
    NO
    YES