보석 분배

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

요약
한 명은 정해진 규칙으로 그리디하게 보석을 집고 다른 한 명은 자신의 총합을 최대화하도록(동점이면 상대 총합도 최대화하도록) 최적으로 집는 번갈아가는 게임을 시뮬레이션해 최종 점수를 구하는 문제입니다.
난이도

어려움10점 중 8점

유형
그리디, 게임 이론, 정렬
정답자
아직 제출이 없습니다

문제

Petra와 Jan은 보석으로 가득 찬 상자를 함께 나누어 가지려고 한다. 하지만 두 사람이 각 보석에 매기는 가치가 서로 다르기 때문에, 공정하게 나누는 일은 쉽지 않다.

두 사람은 턴을 번갈아 가며 한 번에 보석을 하나씩 가져가고, 남은 보석이 없을 때까지 이 과정을 반복한다. 누가 먼저 시작할지는 동전을 던져 정한다.

Petra와 Jan은 서로 다른 전략으로 보석을 고른다.

  • Petra는 남은 보석 중에서 자신이 매긴 가치가 가장 큰 보석을 고른다. 그런 보석이 여러 개라면, 그중에서 Jan이 매긴 가치가 가장 작은 보석을 고른다.
  • Jan은 자신이 최종적으로 얻는 가치의 합이 최대가 되도록 보석을 고른다. 그렇게 되는 선택이 여러 가지라면, 그중에서 Petra가 최종적으로 얻는 가치의 합이 가장 커지도록 고른다.

먼저 시작하는 사람과 두 사람이 각 보석에 매긴 가치가 주어질 때, 두 사람이 최종적으로 가져가는 보석 가치의 합을 각각 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 TT (T≤100T \le 100)가 주어진다. 각 테스트 케이스는 다음과 같이 구성된다.

  • 첫째 줄: 보석의 개수 nn (1≤n≤10001 \le n \le 1000)
  • 둘째 줄: 먼저 턴을 시작하는 사람의 이름. Petra가 먼저 시작하면 Petra, Jan이 먼저 시작하면 Jan이 주어진다.
  • 이어지는 nn개의 줄: 각 줄에 보석 하나에 대한 Petra가 매긴 가치 pip_i와 Jan이 매긴 가치 jij_i가 공백으로 구분되어 주어진다 (0≤pi,ji≤10000 \le p_i, j_i \le 1000).

출력

각 테스트 케이스마다 한 줄에, Petra가 최종적으로 가져가는 가치의 합과 Jan이 최종적으로 가져가는 가치의 합을 공백으로 구분하여 순서대로 출력한다.

예제3

  1. 예제 1

    입력
    3
    4
    Petra
    100 80
    70 80
    50 80
    30 50
    4
    Petra
    10 1
    1 10
    6 6
    4 4
    7
    Jan
    4 1
    3 1
    2 1
    1 1
    1 2
    1 3
    1 4
    
    예상 출력
    170 130
    14 16
    9 10
    
  2. 예제 2

    입력
    2
    1
    Petra
    5 7
    1
    Jan
    5 7
    
    예상 출력
    5 0
    0 7
    
  3. 예제 3

    입력
    2
    4
    Petra
    10 1
    1 10
    6 6
    4 4
    4
    Jan
    10 1
    1 10
    6 6
    4 4
    
    예상 출력
    14 16
    14 16