시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 (추가 시간 없음) | 256 MB | 92 | 24 | 15 | 34.091% |
Alice 와 Bob은 최근 학교에서 덧셈과 큰 수에 대해 배웠다. 둘은 수와 카드를 좋아하기 때문에 둘이서 할 수 있는 카드 놀이를 생각해냈다.
우선 정수 N을 고른 후, 카드 N장에 1부터 N까지의 정수를 딱 한 번씩 적는다. 임의로 N장의 카드를 일렬로 바닥에 늘어놓은 후 게임을 시작한다. 편의상 좌측부터 우측까지 카드에 적힌 수를 C[1], C[2], ..., C[N] 이라 칭하자.
Alice부터 시작해서 둘이 번갈아 가며 게임을 진행하는데, 자신의 차례가 되면 가장 좌측 혹은 가장 우측에 있는 카드 중 한 장을 가져간다 (자신의 차례에는 반드시 딱 한 장의 카드를 가져가야 한다). Alice와 Bob은 아직 어리기 때문에 언제나 자신의 차례가 되면 가장 좌측과 가장 우측에 있는 카드에 적힌 수를 비교한 후, 둘 중 큰 수가 적힌 카드를 가져간다. 둘 중 한 명이 마지막 카드를 가져간 후, 여태 각자 가져간 카드에 적힌 수를 더해서 총 합이 자신의 점수가 된다. 편의상 SA를 (게임을 마친 후) Alice의 점수 SB를 Bob의 점수라 하자.
예를 들어, N = 4 이고 C = [2, 4, 1, 3] 이라 하자. 아래와 같은 순서로 두 어린이가 카드 놀이를 진행하게 된다.
이 경우 SA = 3+4 = 7 그리고 SB = 2+1 = 3 이다.
Alice와 Bob이 카드 놀이 하는 것을 오래 지켜보던 당신은 문득 이런 생각이 들었다. N과 어떤 정수 x를 고른 후, N개의 수가 적힌 카드를 적절한 순서로 나열하여 SA - SB = x 가 되도록 할 수 있을까? 물론 x가 무엇이냐에 따라 이것이 가능할 수도, 아닐 수도 있고, 가능한 경우 여러 가지 다양한 방법이 있을 수 있다 - 이 질문에 대한 답을 찾는 프로그램을 작성하시오.
첫 줄에 테스트 케이스의 수 T가 주어진다. 다음 T줄에 걸쳐, 각 줄에 두 개의 정수 N과 x가 공백으로 구분되어 주어진다.
각 테스트 케이스에 대해 "YES" 혹은 "NO"를 출력한다 (따옴표 제외). 만약 1부터 N이 적힌 카드의 순서를 적절히 골라서 SA - SB = x가 되도록 할 수 있다면 YES를 출력하고, 그 다음 줄에 N장의 카드에 적힌 수를 좌측부터 우측까지 순서대로 공백으로 구분하여 출력한다. SA - SB = x가 되도록 카드를 나열하는 방법이 여럿 있는 경우, 그 중 어느 것을 출력하여도 무방하다. 이것이 불가능하다면 NO를 출력한다.
5 3 1 5 1 6 -1 7 2 8 0
NO YES 2 3 5 1 4 YES 5 1 2 6 3 4 YES 1 2 3 4 5 7 6 YES 6 8 1 2 4 7 5 3
예제 1의 경우 [1, 2, 3] 카드를 어떤 순서로 나열하더라도 SA-SB 가 1이 되는 방법은 없다.