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

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

경로 나누기

면접 대비

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

요약
구간 [0, L]을 길이가 2A에서 2B 사이인 짝수 조각들로 나누되 소가 좋아하는 구간 내부에 경계가 생기지 않게 하면서 조각 수의 최솟값을 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 6점

유형
동적 계획법, 누적 합, 슬라이딩 윈도우, 구간
정답자
아직 제출이 없습니다

문제

농부 존의 소들은 밭에 있는 언덕 능선을 따라 자라는 클로버를 특히 좋아합니다. 클로버에 물을 주기 위해 존은 능선을 따라 스프링클러를 설치하려고 합니다.

능선을 00부터 LL까지 이어지는 1차원 수직선으로 생각합니다(1≤L≤1061 \le L \le 10^6이며 LL은 짝수입니다). 각 스프링클러는 이 수직선 위에 설치되며 좌우 양쪽으로 일정 거리만큼 물을 뿌립니다. 스프링클러의 분사 반경 rr은 A≤r≤BA \le r \le B를 만족하는 정수입니다(1≤A≤B≤10001 \le A \le B \le 1000). 즉, 위치 xx에 설치된 스프링클러는 닫힌 구간 [x−r, x+r][x - r,\ x + r]에 물을 줍니다.

존은 능선 전체에 물을 주되, 모든 지점이 정확히 하나의 스프링클러로만 덮이도록 해야 합니다(빈틈도 겹침도 없어야 합니다). 또한 어떤 스프링클러도 능선의 양 끝을 넘어서 물을 뿌릴 수 없습니다. 바꾸어 말하면, 스프링클러들은 구간 [0,L][0, L]을 연속한 구간들로 분할하며, 각 구간의 길이는 2A2A 이상 2B2B 이하의 짝수여야 합니다.

존의 소 NN마리(1≤N≤10001 \le N \le 1000)는 각자 좋아하는 클로버 구간을 가지고 있으며, 이는 SS부터 EE까지의 구간으로 주어집니다(구간들은 서로 겹칠 수 있습니다). 각 소가 좋아하는 구간은 반드시 하나의 스프링클러가 물을 주어야 합니다(그 스프링클러가 구간 밖까지 물을 뿌리는 것은 상관없습니다). 바꾸어 말하면, 인접한 두 스프링클러의 경계가 어떤 소의 구간 (S,E)(S, E) 내부에(양 끝점을 제외하고) 들어가서는 안 됩니다.

능선 전체에 물을 주기 위해 필요한 스프링클러의 최소 개수를 구하세요.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 NN과 LL.
  • 둘째 줄: 공백으로 구분된 두 정수 AA와 BB.
  • 셋째 줄부터 N+2N+2째 줄까지: 각 줄에 두 정수 SS와 EE(0≤S<E≤L0 \le S < E \le L)가 주어지며, 각각 한 소가 좋아하는 구간의 시작과 끝을 능선의 시작점으로부터의 거리로 나타냅니다.

출력

  • 첫째 줄: 필요한 스프링클러의 최소 개수. 유효한 스프링클러 배치가 존재하지 않으면 −1-1을 출력합니다.

참고

첫 번째 예제를 살펴봅시다. 스프링클러 세 개면 충분합니다. 위치 11에 반경 11인 스프링클러([0,2][0, 2]를 덮음), 위치 44에 반경 22인 스프링클러([2,6][2, 6]을 덮음), 위치 77에 반경 11인 스프링클러([6,8][6, 8]을 덮음)입니다. 가운데 스프링클러는 둘째 소가 좋아하는 구간(33부터 66까지) 전체에 물을 주고, 마지막 스프링클러는 첫째 소가 좋아하는 구간(66부터 77까지) 전체에 물을 줍니다.

                 |-----c2----|-c1|       소가 좋아하는 구간

     |---1---|-------2-------|---3---|   스프링클러

     +---+---+---+---+---+---+---+---+

     0   1   2   3   4   5   6   7   8

예제3

  1. 예제 1

    입력
    2 8
    1 2
    6 7
    3 6
    
    예상 출력
    3
    
  2. 예제 2

    입력
    1 4
    1 2
    1 3
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1 10
    1 2
    1 9
    
    예상 출력
    -1