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

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

스케줄링

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

요약
시작 시각, 마감 시각, 수행 시간이 주어진 n개의 선점 가능 작업을 m개의 동일한 프로세서에서 시간 구간 안에 모두 끝낼 수 있는지 판정한다.
난이도

어려움10점 중 8점

유형
그리디, 정렬, 구간, 구현
정답자
아직 제출이 없습니다

문제

Byteasar가 열세 번째 생일을 맞았다. 부모님이 주신 선물 중 하나는 새 컴퓨터다. 그는 서둘러 선물을 풀고 컴퓨터 설명서를 읽기 시작했다. 컴퓨터에는 mm개의 프로세서가 있다는 사실을 알게 되었다. Byteasar는 기뻐한다. 드디어 많은 작업을 병렬로 실행할 수 있게 되었기 때문이다!

그는 새 컴퓨터에서 실행할 nn개의 작업 목록(번호 11부터 nn)을 재빨리 준비했다. 프로세서는 한 번에 하나의 작업만 실행할 수 있다. 작업 ii를 완료하는 데 c_ic\_i초가 걸리며, 선물을 푼 시점으로부터 p_ip\_i초가 지나기 전에 실행을 시작하거나, 선물을 푼 시점으로부터 k_ik\_i초가 지난 뒤에 완료하는 것은 금지된다. 각 작업의 실행은 원하는 만큼 여러 번 중단할 수 있고, 서로 다른 프로세서로 옮길 수도 있다. 그러나 두 개 이상의 프로세서에서 동시에 실행할 수는 없다. 작업을 프로세서 간에 옮기는 데 걸리는 시간은 무시할 수 있다. 각 작업이 주어진 시간 범위 안에서 실행되고 완료되도록 작업 실행을 스케줄링할 수 있는가? 다시 말해, Byteasar가 목표를 달성할 수 있도록 작업을 시작하고, 중단하고, 프로세서 간에 옮기는 전략이 존재하는가?

입력

첫째 줄에 정수 nn과 mm이 주어진다(1≤n,m≤1001 \le n, m \le 100). 각각 작업의 수와 프로세서의 수다. 다음 nn개의 줄에 Byteasar의 작업이 주어진다. ii번째 줄에는 작업 ii의 설명이 있다. 세 정수 p_ip\_i, k_ik\_i, c_ic\_i가 주어진다(0≤p_i<k_i≤106;1≤c_i≤k_i−p_i0 \le p\_i < k\_i \le 10^6; 1 \le c\_i \le k\_i - p\_i). 각각 ii번째 작업을 실행할 수 있는 시간 구간의 시작과 끝(선물을 푼 시점부터의 초 단위), 그리고 이 작업을 완료하는 데 걸리는 시간이다.

출력

모든 작업을 각자의 시간 범위 안에서 완료할 수 있으면 YES를 출력한다. 그렇지 않으면 NO를 출력한다.

예제2

  1. 예제 1

    입력
    3 2
    3 8 3
    2 5 2
    3 7 3
    
    예상 출력
    YES
    
  2. 예제 2

    입력
    2 1
    0 1 1
    0 1 1
    
    예상 출력
    NO