모두 데려오기

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

요약
차량 배차와 경로 규칙을 시뮬레이션하여 모든 참가자가 대회장에 도착하는 시간을 구하거나, 제한 시간까지 도착한 참가자 수를 구한다.
난이도

보통10점 중 7점

유형
시뮬레이션, 구현, 큐
정답자
아직 제출이 없습니다

문제

지역 예선 대회장까지 참가자들이 쉽게 도착할 수 있도록, 주최 측은 로봇이 운전하는 차량 몇 대를 준비했다. 이 차량들은 미리 정해진 nn개의 교차점을 돌며 그곳에서 기다리는 참가자들을 대회장으로 실어 나른다. 컴퓨터로 제어되는 수송 센터(TC)가 각 차량의 좌석 수와, 각 차량이 대회장을 처음 출발하는 시각을 결정한다.

새 차량이 필요하면 TC에 요청(request)을 보낸다. 좌석 수가 3보다 많은 동안에는 새 차량일수록 직전 차량보다 좌석이 적다. 즉 ii번째 차량의 좌석 수는 max⁡(s−(i−1)⋅t, 3)\max(s - (i-1)\cdot t,\ 3)이다 (i=1,2,3,…i = 1, 2, 3, \dots). 첫 번째 차량은 오전 8시 정각(시각 00)에 대회장을 출발한다. TC가 새 차량 요청을 받으면 차량을 준비하여, 요청을 받은 지 정확히 22초 뒤에 그 차량이 대회장을 출발한다. 같은 시각에 여러 요청이 들어오면 그중 하나만 처리한다.

교차점 jj에서 각 차량은 아래 작업을 수행한다. 같은 시각에 한 교차점에 둘 이상의 차량이 있으면, 서비스 시간이 긴 차량부터 순서대로 작업을 처리한다. 차량의 서비스 시간이란 현재 시각에서 그 차량이 대회장(교차점 00)을 처음 출발한 시각을 뺀 값이다.

  1. j=0j = 0(대회장)이면 차량에 탄 참가자 전원이 내린다. 그렇지 않으면 차량은 태울 수 있는 만큼 참가자를 태운다(차량이 가득 차거나 교차점 jj에 남은 참가자가 없을 때까지).

  2. 그 뒤에도 교차점 jj(j>0j > 0)에 남은 참가자가 있으면, 차량은 TC에 새 차량 요청을 보낸다.

  3. 마지막으로 차량은 다음 교차점 kk를 향해 출발한다. kk는 교차점 00에서도 동일하게 아래 방식으로 로봇 운전자가 정한다.

    • 차량이 가득 찼으면 k=0k = 0.
    • 그렇지 않고 아직 교차점 jj를 출발한 다른 차량이 없으면 k=(j+1) mod nk = (j+1) \bmod n.
    • 그렇지 않으면, ((k0+1) mod n)((k_0+1) \bmod n)이 jj와 다를 경우 그 값을 kk로 한다.
    • 그렇지 않으면 k=(k0+2) mod nk = (k_0+2) \bmod n.
    • (여기서 k0k_0은 교차점 jj를 가장 마지막으로 출발한 차량이 정한 "다음 교차점"이다.)

위 세 작업은 즉시(0초 만에) 이루어진다. 각 교차점에서 다른 임의의 교차점으로 가는 데 걸리는 시간은 주어진다. 모든 참가자는 오전 8시까지 적절한 교차점에 도착해 있으며, 어떤 차량엔가 태워질 때까지 그 자리를 떠나지 않는다. 각 교차점에서 기다리는 참가자 수와 제한 시간이 주어질 때, 모든 참가자가 대회장에 도착하는 시각, 또는 제한 시간까지 대회장에 도착한 참가자 수를 구하여라.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 구성은 다음과 같다.

  • 데이터셋의 이름이 적힌 줄(영문자와 숫자로 이루어진 22~2020자).
  • 세 양의 정수 nn, ss, tt가 적힌 줄 (2<n<112 < n < 11).
  • 이어지는 nn개의 줄에는 각각 n−1n-1개의 정수가 있다. ii번째 줄(i=1,2,3,…i = 1, 2, 3, \dots)에는 교차점 i−1i-1에서 자기 자신(i−1i-1)을 제외한 나머지 모든 교차점으로 가는 데 걸리는 시간(초)이, 도착 교차점 번호 0,1,2,…,n−10, 1, 2, \dots, n-1 순서로 적혀 있다.
  • 이어지는 n−1n-1개의 줄에는 각각 음이 아닌 정수가 하나씩 있다. ii번째 줄(i=1,2,3,…i = 1, 2, 3, \dots)은 교차점 ii에서 기다리는 참가자 수이다.
  • 데이터셋의 마지막 줄에는 제한 시간(초 단위, 1000000010000000 미만)이 있다.

한 줄에 있는 정수들은 정확히 하나의 공백으로 구분된다. 참가자의 총수는 최대 10001000명이다.

입력의 끝은 TheEnd만 적힌 줄로 표시된다.

출력

각 데이터셋마다 두 줄을 출력한다. 첫째 줄에는 입력에 나온 그대로 데이터셋의 이름을 출력한다. 둘째 줄에는, 모든 참가자를 대회장으로 데려오는 데 걸리는 시간이 주어진 제한 시간을 넘지 않으면 그 시간(초)을 <시간> seconds needed 형식으로 출력한다. 그렇지 않으면 제한 시간까지 대회장에 도착한 참가자 수를 <수> contestants reached 형식으로 출력한다.

예제5

  1. 예제 1

    입력
    Dhaka2000
    3 22 4
    30 8
    10 30
    28 8
    20
    20
    100
    Dhaka2001
    3 22 4
    30 8
    10 30
    28 8
    20
    20
    90
    Dhaka2002
    3 22 2
    30 8
    10 30
    28 8
    20
    20
    100
    TheEnd
    
    예상 출력
    Dhaka2000
    98 seconds needed
    Dhaka2001
    22 contestants reached
    Dhaka2002
    88 seconds needed
    
  2. 예제 2

    입력
    Simple
    3 3 1
    1 1
    1 1
    1 1
    1
    1
    100
    TheEnd
    
    예상 출력
    Simple
    3 seconds needed
    
  3. 예제 3

    입력
    Quad
    4 10 1
    1 1 1
    1 1 1
    1 1 1
    1 1 1
    1
    1
    1
    100
    TheEnd
    
    예상 출력
    Quad
    4 seconds needed
    
  4. 예제 4

    입력
    BigCap
    3 40 5
    30 8
    10 30
    28 8
    15
    15
    1000
    TheEnd
    
    예상 출력
    BigCap
    88 seconds needed
    
  5. 예제 5

    입력
    Simple
    3 3 1
    1 1
    1 1
    1 1
    1
    1
    100
    BigCap
    3 40 5
    30 8
    10 30
    28 8
    15
    15
    1000
    TheEnd
    
    예상 출력
    Simple
    3 seconds needed
    BigCap
    88 seconds needed