생태계

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

요약
먹이사슬 순서로 번호가 매겨진 각 종의 개체수와 개체당 먹이량이 주어질 때, 번호가 작은 종부터 차례로 먹이 활동을 시뮬레이션하여 살아남은 개체수를 구한다.
난이도

보통10점 중 4점

유형
시뮬레이션, 구현, 배열, 그리디
정답자
아직 제출이 없습니다

문제

대규모 기름 유출과 같은 환경 재해를 다룰 때 흔히 해당 지역 생태계가 입은 피해가 언급된다. 생태계의 한 가지 측면은 수많은 동식물이 생존(또는 개체 수 조절)을 위해 서로에게 의존한다는 점이다. 따라서 먹이 사슬에 오염 물질이 유입되면 온갖 부작용이 생길 수 있다. 어떤 동물이 오염 물질의 직접적인 영향을 받지 않더라도, 동물성 플랑크톤이 몰살당하면 청어가 먹을 것이 없어지고, 결국 청어를 먹는 물개도 먹이가 부족해진다.

생태계를 다음과 같이 모형화한다. 11번부터 nn번까지 번호가 붙은 nn개의 종이 있다. 각 종은 먹이 사슬에서 자기보다 아래에 있는 종, 즉 번호가 더 작은 종만 잡아먹는다. 각 종에 대해 재해 이후 남은 현재 개체 수와 식단이 주어진다. 식단이란 한 개체가 살아남기 위해 번호가 더 작은 각 종의 개체를 몇 마리 먹어야 하는지를 뜻한다. 식단은 균형 잡힌 것이어서 대체할 수 없다. 예를 들어 물개 한 마리가 반드시 청어 한 마리와 오징어 한 마리를 먹어야 한다면, 청어 두 마리와 오징어 반 마리(또는 오징어 열 마리)로는 대신할 수 없다.

어떤 종이 먹이를 먹으려 할 때 필요한 먹이원 중 하나라도 이미 바닥났다면, 식단을 채우지 못한 개체들은 굶어 죽는다(이때 그 개체들이 먹으려던 다른 먹이는 잡아먹히지 않고 남는다). 모형을 명확히 하기 위해 종은 번호가 작은 순서대로 먹이를 먹는다. 번호가 작은 포식자가 큰 포식자보다 먼저 먹으므로 서로 공유하는 먹이에 먼저 접근할 수 있다. 예컨대 물개(가령 55번)와 돌고래(가령 1212번)가 모두 청어를 필요로 하는데 물개가 남은 청어를 모두 먹어 치웠다면, 돌고래는 모두 죽는다.

각 종에서 몇 마리가 살아남는지를 구하라.

입력

첫 번째 줄에 데이터 집합의 개수 KK가 주어진다. 이어서 KK개의 데이터 집합이 다음 형식으로 주어진다.

각 데이터 집합의 첫 번째 줄에는 종의 개수를 나타내는 정수 nn (1≤n≤1001 \le n \le 100)이 주어진다.

그다음 nn개의 줄이 이어진다. ii번째 줄은 ii번 종을 설명하며 ii개의 정수를 담는다. 첫 번째 정수는 ii번 종의 현재 개체 수이다. 나머지 i−1i-1개의 정수는 1,2,…,i−11, 2, \ldots, i-1번 종 각각에 대해, ii번 종의 한 개체가 살아남기 위해 그 종의 개체를 몇 마리 먹어야 하는지를 순서대로 나타낸다.

출력

각 데이터 집합마다 먼저 Data Set x: 한 줄을 출력한다. 여기서 xx는 데이터 집합의 번호이며 11부터 시작한다. 그다음 1,2,…,n1, 2, \ldots, n번 종이 한 단위 시간 뒤에 살아남은 개체 수를 순서대로 한 줄에 하나씩 총 nn개의 줄로 출력한다. 서로 다른 데이터 집합 사이에는 빈 줄을 하나 넣는다.

예제4

  1. 예제 1

    입력
    1
    6
    200
    30 2
    1000 0 5
    300 1 0 1
    20 2 0 0 0
    10 1 0 0 0 1
    
    예상 출력
    Data Set 1:
    84
    0
    0
    6
    10
    10
    
  2. 예제 2

    입력
    1
    1
    42
    
    예상 출력
    Data Set 1:
    42
    
  3. 예제 3

    입력
    1
    2
    5
    10 1
    
    예상 출력
    Data Set 1:
    0
    5
    
  4. 예제 4

    입력
    2
    1
    7
    2
    5
    10 1
    
    예상 출력
    Data Set 1:
    7
    
    Data Set 2:
    0
    5