겨울 숲의 수호자
시간 제한3초메모리 제한512 MB
모든 야수를 K번의 공격으로 처치하면서 숲이 입는 피해가 최소가 되도록 매 초 화살을 쏠 야수를 정하는 전략을 구한다.
문제
야수들의 겨울 숲 습격이 시작되었다. 이를 맞아 겨울 숲의 수호자는 숲 상공에서 야수들에게 마법 화살을 쏘아 겨울 숲을 지키고자 한다.
습격이 시작된 시점부터 매 초마다 다음의 사건들이 순서대로 일어난다.
- 현재 시점이 초일 경우 야수 가 겨울 숲에서 만큼 떨어진 위치에 생성된다.
- 살아 있는 모든 야수들 중, 겨울 숲에 아직 도착하지 않은 야수는 겨울 숲을 향해 만큼 이동한다. 이미 겨울 숲에 도착해 있는 야수는 겨울 숲에 의 피해를 입힌다.
- 수호자는 살아 있는 야수 중 하나에 마법 화살을 쏜다. 발사된 화살은 야수를 즉시 타격할 수 있다. 한 야수가 화살을 맞은 총 횟수가 번이 되었다면 그 야수는 죽는다.
수호자는 야수가 언제 어디서 생성될지 미리 알고 있으며, 이를 바탕으로 매 초마다 어떤 야수를 쏠지 전략을 잘 세우면 숲이 입는 피해를 줄일 수 있다.
예를 들어, 습격이 시작된 시점의 초 후에 만큼 떨어진 위치에서 야수 1이 등장하고, 초 후에 만큼 떨어진 위치에서 야수 2가 등장하고 이라고 가정하자. 이 때 수호자가 야수 1을 초부터 번 공격하고 야수 2를 초부터 번 공격한다면, 야수 1은 겨울 숲에 다가오기 전에 죽지만 야수 2는 초부터 겨울 숲을 공격하기 시작해서 초까지 숲을 파괴하고 죽으므로 겨울 숲은 의 피해를 입는다.
하지만 야수 1을 초부터 번, 야수 2를 초부터 번, 야수 1을 다시 초부터 번 공격하면 겨울 숲이 피해를 입지 않은 채로 모든 야수를 쓰러트릴 수 있다.
이 때 이러한 전략은 (시작 시간, 공격 횟수, 야수의 번호)로 나타내어지는 사건들이 시간 순서로 정렬된 집합으로 표현할 수 있다. 위의 예시에서 첫 번째 전략은 , 로, 두 번째 전략은 , , 로 표현할 수 있다.
당신의 목적은 수호자를 도와 겨울 숲의 피해를 최소화하면서 모든 야수를 쓰러트리는 전략을 찾는 것이다.
입력
첫 줄에 테스트 케이스의 수인 ()이 주어진다.
각 테스트 케이스의 첫 줄에는 야수들의 수인 ()과 야수 하나를 쓰러트리기 위해 쏴야 하는 화살의 수인 ()이 주어진다.
다음 개의 줄에 번째 야수가 생성되는 시간인 과 위치인 ()가 주어진다.
모든 테스트 케이스들의 의 합은 을 넘지 않음이 보장된다.
출력
각 테스트 케이스에 대해 수호자가 세운 최적의 전략을 다음과 같이 출력한다.
첫 줄에는 겨울 숲이 입는 총 피해의 최소값을 출력한다.
다음 줄에는 수호자가 세운 전략을 표현하는 사건의 개수 ()을 출력한다. 입력의 모든 경우에 대해, 이러한 사건의 개수가 을 넘지 않는 전략이 항상 존재함이 보장된다.
다음 개의 줄에는 사건의 시작 시간인 , 시작 시간부터 연속해서 같은 야수를 공격한 횟수인 와 공격한 야수의 번호인 를 한 줄씩 시간 순서로 출력한다. (, , )
가능한 방법이 여럿일 경우 그 중 아무거나 출력한다.