RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
문제 KOI00192

막대기

설명

다양한 길이의 막대기를 가지고 즐길 수 있는 게임이 있다. 게임을 시작하기 전에 간격이 L인 두 개의 평행한 수평선을 책상 위에 긋고, 막대기의 양 끝이 각 수평선에 하나씩 위치하도록 놓는다. 여러 개의 막대기 끝이 수평선 위의 한 점에서 만날 수는 있지만, 두 막대기가 완전히 겹쳐져 있는 경우는 없다. 놓여 있는 각 막대기는 (t, d)로 표현된다. 여기서 t는 위쪽 수평선에서의 좌표이고 d는 아래쪽 수평선에서의 좌표이다. 아래 그림 1에서 막대기 a는 (1, 0), 막대기 b는 (6, 0)으로 표시된다.

게임은 책상에 놓여 있는 막대기들 중 일부를 들어내어 남아 있는 막대기들이 다음의 세 조건을 모두 만족하는 하나의 지그재그 선이 구성되도록 하는 것이다: (1) 막대기들은 끝점을 제외하곤 서로 교차하지 않는다. (2) 세 개 이상의 막대기 끝이 한 점에서 만나지 않는다. (3) 모든 막대기는 연결되어 있다.

이 게임의 승자는 길이가 가장 긴 지그재그 선을 만든 사람이다. 지그재그 선의 길이는 막대기 길이들의 합이며, 각 막대기의 길이는 양 끝점의 수평 거리와 수직 거리를 더한 값으로 계산한다. 즉, 막대기 (t, d)의 수평 거리는 t와 d 사이의 절댓값 |t-d|이고, 수직 거리는 두 수평선 사이의 간격인 L이다. 위 그림에서 각 막대기의 길이는 다음과 같다.

        막대기
        a
        b
        c
        d
        e
        f
        g




        길이
        4
        9
        6
        4
        4
        7
        3

예를 들면, 그림 1에서 막대기 a, b, e 만 남겨진 경우는 세 조건을 모두 만족하는 지그재그 선이 며, 길이는 \(17 = 4\)+9+4 이다. 막대기 c, e 만 남겨진 경우도 세 조건을 모두 만족하는 지그재그 선이며, 길이는 \(10 = 6\)+4 이다. 막대기 b, c 만 남겨진 경우는 조건 (1)에 위배되고, 막대기 c, d, e 만 남겨진 경우는 조건 (2)에 위배되고, 막대기 a, b, g 만 남겨진 경우는 조건 (3)에 위배된다. 길이가 가장 긴 지그재그 선은 막대기 c, d, f, g로 구성되며, 길이는 \(20 = 6\)+4+7+3 이다.

막대기들의 초기 상태가 주어져 있을 때, 가장 긴 지그재그 선의 길이를 구하기 위한 프로그램을 작성하시오.

※ 이 문제의 채점 데이터는 공개된 공식 데이터가 없어 재구성한 것입니다. 문제 지문은 원본(정보올림피아드 기출)을 따릅니다.

제약
입력 형식

첫 줄에는 막대기의 개수와 수평선 사이의 간격을 나타내는 두 개의 정수 N과 L이 주어진다. 여기서 N은 1 이상 100,000 이하이고, L은 1 이상 1,000,000 이하이다. 그 다음 N 개의 줄에는 각 줄마다 막대기 (t, d)를 나타내는 두 개의 정수 t와 d가 빈칸을 사이에 두고 주어진다. 여기서 t와 d는 각각 0 이상 100,000,000 이하이다. 입력으로 들어오는 막대기들 중 어떤 두 막대기도 완전히 겹쳐져 있는 경우는 없다.

출력 형식

주어진 입력에 대해 길이가 가장 긴 지그재그 선의 길이를 한 줄에 출력한다.

예제 1
입력
7 3
1 0
6 0
2 5
4 5
6 5
4 8
8 8
출력
20
예제 2
입력
4 5
1 1
3 2
3 4
5 5
출력
12
문제 정보

생성자가 기록되지 않았습니다.

출처 올림피아드 > 한국정보올림피아드 > KOI 2013 > 2차 대회 > 고등부 1번

평가 및 의견

막대기

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

막대기

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8