세훈이는 선물가게를 운영한다. 세훈이의 선물가게는 특이하게도 손님이 어떤 선물을 구매할지 선택할 수가 없다. 대신 세훈이의 취향으로 랜덤하게 준비된 선물 중 몇 개를 구매할 것인지, 파란색과 빨간색 중 어떤 색으로 포장 받을 것인지만 결정해 주문할 수 있다.
상민이와 지수는 세훈이의 가게에서 선물 포장을 맡은 아르바이트생이다. 손님들은 파란색 포장지를 원하면 상민이에게, 빨간색 포장지를 원하면 지수에게 주문을 한다. 두 사람은 각자 주문을 받으면 그때부터 포장을 시작하는데, 현재 남아있는 선물 중 가장 앞에 있는 선물을 가져와 포장하고 주문을 받은 개수만큼 이를 반복하는 형태다. 이때 선물 하나를 포장하는 데 상민이는 A초, 지수는 B초가 걸린다. 두 사람 모두 받거나 밀린 주문이 없는데 미리 선물을 가져오거나 포장하는 일은 없으며, 두 사람이 동시에 선물을 가져올 때는 알바짬이 조금 더 있는 상민이가 먼저 가져오고, 지수가 그 뒤의 선물을 가져온다.
세훈이는 어제 구매한 선물이 망가져 있다는 항의 전화를 받았다. 자신이 준비한 선물에는 문제가 없었기에 손님에게 포장지의 색을 물었지만, 손님은 자신이 받은 선물이 무엇인지만 말하며 화를 낼 뿐이었다. 어쩔 수 없이 세훈이는 어제 가게를 방문한 손님들의 주문 내역을 보고 그 선물을 누가 포장했는지 파악하려 한다.
방문한 손님의 수와 각 손님이 주문한 시각, 선택한 포장지, 포장 받을 선물의 개수가 주어졌을 때 상민이와 지수가 각자 어떤 선물들을 포장했는지 알아내는 프로그램을 작성해보자.
입력
첫 줄에 상민이가 선물 하나를 포장하는 데 걸리는 시간 A, 지수가 선물 하나를 포장하는 데 걸리는 시간 B, 어제 세훈이 가게의 손님 수 N(1 ≤ N ≤ 1,000)이 주어진다.
이후 N개의 줄에 걸쳐 1번부터 N번 손님의 주문 시각 ti(1 ≤ ti ≤ 86,400), 선택한 포장지의 색깔 ci(ci = “B”|”R”), 주문한 선물의 개수 mi(1 ≤ mi ≤ 100)가 주어진다.
ti는 가게가 오픈한 지 ti초 후에 손님이 주문했음을 뜻하며 ci는 포장지의 색깔을 의미하는 알파벳으로 “B”는 파란색을, “R”은 빨간색을 의미한다. 주어지는 입력은 시간의 흐름에 맞게 ti의 오름차순으로 주어지며, 서로 같은 시간에 주문한 손님은 없다.
출력
첫 번째 줄에 상민이가 포장한 선물의 개수를 출력한다. 이후 두 번째 줄에 상민이가 포장한 선물들의 번호를 오름차순으로 공백으로 구분하여 출력한다.
세 번째 줄에 지수가 포장한 선물의 개수를 출력한다. 이후 네 번째 줄에 지수가 포장한 선물들의 번호를 오름차순으로 공백으로 구분하여 출력한다.
서브태스크 1 (100점)
A = B = 0
A, B가 0이라는 것은 해당 아르바이트생의 포장 속도가 너무 빨라서, 주문과 동시에 해당 주문의 모든 선물 포장이 끝난다는 의미이다.
for i inrange(int(present_count)): # 주문 개수만큼 반복 heapq.heappush(pacakage_list, [start_time, 'B']) # 상민 포장시작 시간 리스트에 저장 start_time += s_time # 기존 포장시작시간에 포장에 걸리는 시간 더하기 s_end = start_time # 포장끝난 시간은 포장시작시간+포장에 걸리는 시간
elif color == 'R': # 지수 start_time = max(start_time, j_end)
for i inrange(int(present_count)): heapq.heappush(pacakage_list, [start_time, 'R']) start_time += j_time j_end = start_time
s_present, j_present = [], [] # 상민, 지수가 포장한 선물리스트
for i inrange(1, len(pacakage_list) + 1): present = heapq.heappop(pacakage_list) if present[1] == 'B': s_present.append(i) else: j_present.append(i)
if color == 'B': # 상민 start_time = max(start_time, s_end) # if start_time < s_end: # 상민 포장 주문시각이 포장끝난 시각보다 먼저일 경우 # start_time = s_end # 주문시각(포장시작시각)을 포장끝난 시점으로 변경해준다.
for i inrange(int(present_count)): # 주문 개수만큼 반복 sangmin.append([start_time, 'B']) # 상민 포장시작 시간 리스트에 저장 start_time += s_time # 기존 포장시작시간에 포장에 걸리는 시간 더하기 s_end = start_time # 포장끝난 시간은 포장시작시간+포장에 걸리는 시간
elif color == 'R': # 지수 start_time = max(start_time, j_end) # if start_time < j_end: # start_time = j_end
for i inrange(int(present_count)): jisu.append([start_time, 'R']) start_time += j_time j_end = start_time