| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 5 초 | 1024 MB | 192 | 11 | 10 | 7.194% |
"펌프 잇 업" 의 개발사 "모른다미로" 에 개발자로 취직하게 된 아티초크는 펌프 잇 업의 후속작 개발을 맡게 되었다. 후속작에서 가장 크게 달라지는 점은, 발판의 개수가 $N (1 \le N \le 250\,000)$개라는 점이다.
아티초크는 되도록 기존 코드를 그대로 가져다 쓰려고 했지만, 문제가 생겼다. 기존 코드는 발판 개수가 $10$개라는 전제하에 짜여 있던 터라, 그 코드에 바뀐 발판의 개수를 적용하기 만만치 않았다! 그래서 기존 코드를 수정할지, 아니면 아예 새로 짤지 고민하던 아티초크는 결국 다 엎고 처음부터 다시 짜기로 했다.
아티초크의 동업자인 당신은 먼저 판정, 콤보 시스템과 게임 결과 창을 화면에 표시하는 코드를 짜는 업무를 맡게 되었다. 해당 부분은 기본적으로 펌프 잇 업의 시스템을 그대로 따라가기로 했다.
게임 목표
펌프 잇 업의 목표는 기본적으로 "노트" 가 등장하는 시점에 맞게 발판을 밟는 것이다. 이때 노트와 관련된 용어의 정의는 다음과 같다.
판정
발판을 밟은 시점 근처에 해당 발판에 노트가 있었을 경우, "판정" 이 발생한다. 판정 시스템은 롱노트인지 일반노트인지 여부에 따라 다른데, 세부 사항과 관련 용어의 정의는 다음과 같다.
판정의 발생
플레이어가 발판을 밟아 등장한 노트에 대한 판정이 부여되는 것을 "판정의 발생" 이라 한다. 이때 판정이 발생하는 시점도 해당 노트가 롱노트인지, 일반노트인지에 따라 달라진다.
콤보
플레이어가 연속하여 노트를 좋은 판정으로 처리하면 "콤보", 플레이어가 연속하여 노트를 놓치면 "미스콤보" 가 발생한다. 자세한 내용은 다음과 같다.
결과창
미스콤보가 $51$ 이상이 되지 않는 한, 게임이 종료된 후 게임 결과를 출력한다. 자세한 내용은 다음과 같다.
당신은 노트들의 등장 시점과 플레이어가 발판을 밟기 시작한 시점, 발판을 뗀 시점이 모두 주어질 때, 상황에 맞는 판정, 콤보수, 게임 결과를 출력하는 프로그램을 구현하게 되었다. 뭘 하는진 모르겠지만 아무튼 바쁜 아티초크를 대신하여 구현해 보자.
첫 번째 줄에 발판의 개수 $N (1 \le N \le 250\,000)$이 주어진다.
두 번째 줄에 판정 범위를 나타내는 $t_p, t_{gr}, t_{gd}, t_b (1 \le t_p < t_{gr} < t_{gd} < t_b \le 10^9)$가 주어진다.
다음 $N$개의 줄 중 $i (1 \le i \le N)$ 번째 줄의 첫 번째 수는 $i$번째 발판에 등장하는 일반노트의 개수 $S_i$를 의미한다. 그리고 다음 $S_i$개의 수는 노트가 등장하는 시점 $s_1, s_2, \cdots , s_{S_i} (1 \le s_j < s_{j+1} \le 10^9, 1 \le j < S_i)$을 의미한다. 이때 $S_i \ge 0$이고, $\sum_{i=1}^{N} {S_i} \le 250\,000$이다.
다음 $N$개의 줄 중 $(1 \le i \le N)$ 번째 줄의 첫 번째 수는 $i$번째 발판에 등장하는 롱노트의 개수 $L_i$를 의미한다. 그리고 다음 $2L_i$개의 수는 플레이어가 발판을 밟은 시점 $l_1, l_2, \cdots , l_{2L_i} (1 \le l_j < l_{j+1} \le 10^9, 1 \le j < 2L_i)$을 의미한다. 이때 $L_i \ge 0$이며, $\sum_{i=1}^{N} {L_i} \le 250\,000$이고, 각 줄의 $2L_i$개의 수 중 홀수 번째로 등장하는 수는 롱노트가 시작하는 시점, 짝수 번째로 등장하는 수는 롱노트가 끝나는 시점을 의미한다. 롱노트가 시작하는 시점과 끝나는 시점 사이에 같은 발판에 일반노트가 등장하는 경우는 없다.
다음 $N$개의 줄 중 $i (1 \le i \le N)$번째 줄의 첫 번째 수는 플레이어가 $i$번째 발판을 밟은 횟수 $U_i$를 의미한다. 그리고 다음 $2U_i$개의 수는 플레이어가 발판을 밟은 시점 $u_1, u_2, \cdots , u_{2K_i} (1 \le u_j < u_{j+1} \le 10^9, 1 \le j < 2U_i)$을 의미한다. 이때 $U_i \ge 0$이며, $\sum_{i=1}^{N} {U_i} \le 500\,000$이고, 각 줄의 $2U_i$개의 수 중 홀수 번째로 등장하는 수는 발판을 밟기 시작한 시점, 짝수 번째로 등장하는 수는 발판을 뗀 시점을 의미한다.
노트 수(단, 다중노트는 하나의 노트로 취급한다)에 해당하는 줄 만큼, 해당 노트의 판정과, 필요하다면 현재 콤보 또는 미스콤보 수를 출력한다. 단, 도중에 미스콤보가 $51$ 이상이 되는 경우, 이후 노트의 판정 및 결과창을 출력하지 않은 채로 프로그램을 종료한다.
한 번도 미스콤보가 $51$을 넘지 않은 채로 게임이 종료되었을 경우, 다음 $6$줄에는 결과창을 출력한다.
자세한 출력형식은 예체를 참고하도록 하자.
1 1 2 3 4 6 1 3 5 7 9 11 0 6 5 6 7 8 9 10 11 12 13 14 15 16
BAD BAD BAD BAD BAD BAD PERFECT 000 GREAT 000 GOOD 000 BAD 006 MISS 000 MAX COMBO 000
2 1 2 3 4 1 1 1 4 0 0 1 4 5 1 3 4
PERFECT GOOD PERFECT 001 GREAT 000 GOOD 001 BAD 000 MISS 000 MAX COMBO 001
1 1 2 3 4 6 1 3 5 7 9 11 0 6 1 2 3 4 5 6 7 8 9 10 14 15
PERFECT PERFECT PERFECT PERFECT 004 PERFECT 005 GOOD 005 PERFECT 005 GREAT 000 GOOD 001 BAD 000 MISS 000 MAX COMBO 005
2 1 2 3 4 1 1 1 4 0 0 1 3 4 1 3 4
GREAT PERFECT PERFECT 001 GREAT 001 GOOD 000 BAD 000 MISS 000 MAX COMBO 002
4 1 2 3 4 1 5 1 5 1 5 1 5 0 0 0 0 1 1 2 1 2 3 1 3 4 1 4 5
BAD PERFECT 000 GREAT 000 GOOD 000 BAD 001 MISS 000 MAX COMBO 000
4 1 2 3 4 4 1 3 5 7 1 7 1 7 1 7 0 0 0 0 4 1 2 3 4 5 6 7 8 1 7 8 1 7 8 1 7 8
PERFECT PERFECT PERFECT PERFECT 004 PERFECT 004 GREAT 000 GOOD 000 BAD 000 MISS 000 MAX COMBO 004
2 1 2 3 4 0 2 500000001 500000002 1 500000000 500000003 0 1 1 1000000000 2 499999999 500000000 500000002 500000003
PERFECT GREAT PERFECT PERFECT 004 PERFECT 003 GREAT 001 GOOD 000 BAD 000 MISS 000 MAX COMBO 004
1 1 2 3 4 53 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 0 0
MISS MISS MISS MISS 004 MISS 005 MISS 006 MISS 007 MISS 008 MISS 009 MISS 010 MISS 011 MISS 012 MISS 013 MISS 014 MISS 015 MISS 016 MISS 017 MISS 018 MISS 019 MISS 020 MISS 021 MISS 022 MISS 023 MISS 024 MISS 025 MISS 026 MISS 027 MISS 028 MISS 029 MISS 030 MISS 031 MISS 032 MISS 033 MISS 034 MISS 035 MISS 036 MISS 037 MISS 038 MISS 039 MISS 040 MISS 041 MISS 042 MISS 043 MISS 044 MISS 045 MISS 046 MISS 047 MISS 048 MISS 049 MISS 050 MISS 051 HEY!! WHY DON'T YOU JUST GET UP AND DANCE MAN?
Contest > BOJ User Contest > 유틸컵 > 제1회 유틸컵 - Chapter 1 I번