아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

울타리 칠하기 (라지)

시간 제한10초메모리 제한512 MB

요약
구간과 색을 가진 N개의 제안 중에서 10000개 울타리 구간을 모두 덮으면서 색이 3개 이하가 되도록 최소 개수의 제안을 고른다.
난이도

어려움10점 중 8점

유형
구간, 그리디, 동적 계획법, 구현
정답자
아직 제출이 없습니다

문제

울타리를 칠할 사람을 고용해야 한다. 울타리는 1번부터 10000번까지 번호가 붙은 10000개의 연속된 구간으로 이루어져 있다.

도장공들이 견적을 보낸다. 견적 하나는 연속된 구간을 한 가지 색으로 칠하겠다는 제안이다. 다음 두 조건을 모두 만족하도록 견적의 집합을 받아들여야 한다.

  • 울타리의 모든 구간이 칠해진다.
  • 울타리를 칠하는 데 쓰는 색이 3가지 이하다.

두 조건을 만족시킬 수 있으면 받아들여야 하는 견적의 최소 개수를 구하라. 색은 받아들인 견적의 색만 센다. 받아들인 견적끼리 칠하는 구간이 겹쳐도 된다.

입력

  • 첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스는 다음 형식으로 주어진다.

  • 첫째 줄에 견적의 개수 NN이 주어진다.
  • 다음 NN개의 줄에 견적이 한 줄에 하나씩 C A B 형식으로 주어진다. CC는 색이고 길이가 10 이하인 대문자 알파벳 문자열이다. AA는 칠하기 시작하는 구간 번호, BB는 마지막으로 칠하는 구간 번호이며 1≤A≤B≤100001 \le A \le B \le 10000이다.

제한

  • 1≤T≤501 \le T \le 50
  • 1≤N≤3001 \le N \le 300

출력

각 테스트 케이스마다 입력에 주어진 순서대로 한 줄씩 Case #X: Y를 출력한다. XX는 테스트 케이스 번호이고 YY는 받아들여야 하는 견적의 최소 개수다. 받아들일 수 있는 견적의 집합이 없으면 Case #X: IMPOSSIBLE을 출력한다.

힌트

예제 입력의 첫째 테스트 케이스에서는 두 견적을 모두 받아들이면 5000개씩 겹치지 않게 울타리 전체가 칠해진다.

둘째 케이스에서는 도장공들이 칠하는 구간이 겹치지만, 겹쳐도 괜찮다.

셋째 케이스에서는 네 견적을 모두 받아들이면 울타리 전체가 칠해지지만 색이 4가지가 되므로 받아들일 수 없다.

넷째 케이스에서는 4001번 구간을 칠할 수 없다.

다섯째 케이스에서는 첫째와 둘째 견적만 받아들이면 울타리를 전부 칠할 수 있다.

예제1

  1. 예제 1

    입력
    5
    2
    BLUE 1 5000
    RED 5001 10000
    3
    BLUE 1 6000
    RED 2000 8000
    WHITE 7000 10000
    4
    BLUE 1 3000
    RED 2000 5000
    ORANGE 4000 8000
    GREEN 7000 10000
    2
    BLUE 1 4000
    RED 4002 10000
    3
    BLUE 1 6000
    RED 4000 10000
    ORANGE 3000 8000
    
    예상 출력
    Case #1: 2
    Case #2: 3
    Case #3: IMPOSSIBLE
    Case #4: IMPOSSIBLE
    Case #5: 2