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

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

막대기

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

요약
끝점에서만 만나고 서로 교차하지 않도록 막대를 이어 총 길이를 최대화합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 그래프, 기하, 정렬
정답자
아직 제출이 없습니다

문제

길이가 서로 다른 여러 막대기로 즐기는 게임이 있다. 게임을 시작하기 전에 간격이 LL인 두 개의 평행한 수평선을 책상 위에 긋고, 각 막대기의 두 끝이 위쪽 수평선과 아래쪽 수평선에 하나씩 놓이도록 배치한다. 여러 막대기의 끝이 수평선 위의 한 점에서 만날 수는 있지만, 두 막대기가 완전히 겹치는 경우는 없다.

각 막대기는 (t,d)(t, d)로 나타낸다. 여기서 tt는 위쪽 수평선에서의 좌표, dd는 아래쪽 수평선에서의 좌표이다. 아래 그림 1에서 막대기 aa는 (1,0)(1, 0), 막대기 bb는 (6,0)(6, 0)이다.

그림 1: 두 수평선 사이에 놓인 막대기들

게임의 목표는 놓여 있는 막대기 중 일부를 들어내어, 남은 막대기들이 다음 세 조건을 모두 만족하는 하나의 지그재그 선을 이루도록 하는 것이다.

  1. 막대기들은 끝점에서만 맞닿고, 그 외에는 서로 교차하지 않는다.
  2. 한 점에서 세 개 이상의 막대기 끝이 만나지 않는다.
  3. 모든 막대기가 서로 연결되어 있다.

이 게임의 승자는 가장 긴 지그재그 선을 만든 사람이다. 지그재그 선의 길이는 그것을 이루는 막대기 길이의 합이며, 막대기 하나의 길이는 두 끝점 사이의 수평 거리와 수직 거리를 더한 값이다. 막대기 (t,d)(t, d)의 수평 거리는 ∣t−d∣|t - d|이고, 수직 거리는 두 수평선 사이의 간격인 LL이다. 위 그림에서 각 막대기의 길이는 다음과 같다.

막대기aabbccddeeffgg
길이4964473

예를 들어 그림 1에서 막대기 a,b,ea, b, e만 남기면 세 조건을 모두 만족하는 지그재그 선이 되고 길이는 4+9+4=174 + 9 + 4 = 17이다. 막대기 c,ec, e만 남겨도 세 조건을 모두 만족하며 길이는 6+4=106 + 4 = 10이다. 막대기 b,cb, c만 남기면 조건 1을, 막대기 c,d,ec, d, e만 남기면 조건 2를, 막대기 a,b,ga, b, g만 남기면 조건 3을 위반한다. 가장 긴 지그재그 선은 막대기 c,d,f,gc, d, f, g로 이루어지며 길이는 6+4+7+3=206 + 4 + 7 + 3 = 20이다.

막대기들의 초기 배치가 주어질 때, 만들 수 있는 가장 긴 지그재그 선의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 막대기의 개수 NN과 두 수평선 사이의 간격 LL이 공백을 사이에 두고 주어진다. 1≤N≤100,0001 \le N \le 100{,}000이고 1≤L≤1,000,0001 \le L \le 1{,}000{,}000이다.

다음 NN개의 줄에는 각 줄마다 막대기 하나를 나타내는 두 정수 tt와 dd가 공백을 사이에 두고 주어진다. 0≤t,d≤100,000,0000 \le t, d \le 100{,}000{,}000이다. 입력으로 주어지는 어떤 두 막대기도 완전히 겹치지 않는다.

출력

만들 수 있는 가장 긴 지그재그 선의 길이를 한 줄에 출력한다.

힌트

중간 계산 값과 정답이 32비트 정수 범위를 벗어날 수 있으므로 64비트 정수 자료형을 사용하는 것을 권장한다.

예제2

  1. 예제 1

    입력
    7 3
    1 0
    6 0
    2 5
    4 5
    6 5
    4 8
    8 8
    
    예상 출력
    20
    
  2. 예제 2

    입력
    4 5
    1 1
    3 2
    3 4
    5 5
    
    예상 출력
    12