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

경계 로봇

Diamond II 다이아몬드 II
난이도
1s
시간 제한
512MB
메모리 제한
0
맞았습니다!!
2
제출 수
0.0%
정답률
레이팅

의견: 0

설명

비밀 연구소의 높은 장벽 앞에는 침입자를 식별할 수 있는 \(N\)개의 센서가 놓여 있다. 장벽은 일직선으로 뻗어있어서, 직선 상의 구간 [\(0\), \(L\)]로 나타내고, 센서는 이 구간 안에 놓인 점으로 나타내자.

센서는 식별 범위 \(r\)를 가지며, 이 범위는 모든 센서에 대하여 동일하다. 다시 말해서, 점 \(p\)에 있는 센서는 구간 [\(p − r\), \(p + r\)]에 속한 침입자를 식별할 수 있다. 이 구간을 센서의 식별 구간이라고 한다.

장벽의 경계를 담당하는 하나의 로봇이 존재하고, 이 로봇은 초기에 장벽의 왼쪽 끝에 위치한다. 로봇은 장벽을 따라 좌우로 움직이면서 센서를 실어서 옮길 수 있다. 로봇은 자기 위치에서만 센서를 실거나 놓을 수 있다. 그러나, 로봇이 한 번에 실을 수 있는 센서의 개수에는 제한이 없다.

모든 센서의 식별 구간의 합집합이 장벽 [\(0\), \(L\)]을 완전히 포함한다면, 센서가 완벽한 경계에 있다고 한다. 로봇은 완벽한 경계를 위하여 필요하면 센서를 실어서 옮겨야 한다. 이때, 로봇이 움직인 총 거리를 최소화해야 한다.

장벽 [\(0\), \(L\)]과 센서 \(N\)개의 초기 위치, 센서의 식별 범위 \(r\)이 주어질 때, 완벽한 경계를 위해서 로봇이 움직여야 하는 총 거리의 최솟값을 출력하는 프로그램을 작성하시오.

Hint.

첫 번째 예제의 경우, 다음과 같이 로봇이 움직이는 것이 최적이다.

  1. \(0\)에 위치한 로봇이 \(3\)으로 이동한다.
  2. 현 위치에 놓여 있는 센서를 싣는다.
  3. \(3\)에 위치한 로봇이 \(2\)로 이동한다.
  4. 실은 센서를 현 위치에 놓는다.

이때, 센서의 최종 위치는 \(2\), \(6\)이며, 센서의 식별 구간의 합집합은 [\(0\), \(8\)]로, 장벽 [\(0\), \(7\)]을 완전하게 포함한다. 로봇이 움직인 총 거리는 \(4\)이며, 이보다 적게 움직여서 완벽한 경계를 할 수 없으므로, 답은 \(4\)이다.

두 번째 예제의 경우, 다음과 같이 로봇이 움직이는 것이 최적이다.

  1. 현 위치 \(0\)에 놓여 있는 센서 두 개를 모두 싣는다.
  2. \(0\)에 위치한 로봇이 \(1.5\)로 이동한다.
  3. 실은 센서 중 하나를 현 위치에 놓는다.
  4. \(1.5\)에 위치한 로봇이 \(7\)로 이동한다.
  5. 남은 센서 하나를 현 위치에 놓는다. 이와 같이, 로봇이 센서를 정수가 아닌 위치에 놓을 수 있음에 유의하라

제약
  • \(1 ≤ N ≤ 1,000,000\)
  • \(1 ≤ L ≤ 10^{12}\)
  • \(1 ≤ r ≤ 10^{12}\)
  • \(L\)\(r\)은 모두 정수이다.
  • 모든 센서의 초기 위치는 \(0\) 이상 \(L\) 이하인 정수이다.
  • 모든 센서의 초기 위치는 단조증가하는 순서대로 주어진다.
입력 형식

첫 번째 줄에 각각 센서의 개수와 장벽의 길이, 센서의 식별 범위를 나타내는 세 정수 \(N, L, r\)이 공백을 사이에 두고 주어진다.

두 번째 줄에 센서들의 초기 위치를 나타내는 \(N\)개의 정수가 공백을 사이에 두고 단조증가하는 순서대로 주어진다. 즉, \(N\)개의 정수가 정렬된 상태로 주어진다.

출력 형식

만약 센서들을 어떻게 배치하더라도 완벽한 경계를 할 수 없다면, 첫 번째 줄에 \(−1\)을 출력한다.

만일 완벽한 경계가 가능하다면, 첫 번째 줄에 완벽한 경계를 위해 로봇이 움직여야 하는 총 거리의 최솟 값을 출력한다. 이 값은 항상 정수임을 증명할 수 있다.

서브태스크
서브태스크점수설명

1

12점

\(N ≤ 10, L ≤ 100, r ≤ 10\)

2

7점

\(N ≤ 30, L ≤ 2,000, r ≤ 30\)

3

12점

\(N ≤ 500\)

4

28점

\(N ≤ 2,500\)

5

41점

추가 제약 조건 없음.

예제 1
입력
2 7 2
3 6
출력
4
설명

첫 번째 예제의 경우, 다음과 같이 로봇이 움직이는 것이 최적이다.

  1. \(0\)에 위치한 로봇이 \(3\)으로 이동한다.
  2. 현 위치에 놓여 있는 센서를 싣는다.
  3. \(3\)에 위치한 로봇이 \(2\)로 이동한다.
  4. 실은 센서를 현 위치에 놓는다.

이때, 센서의 최종 위치는 \(2\), \(6\)이며, 센서의 식별 구간의 합집합은 [\(0\), \(8\)]로, 장벽 [\(0\), \(7\)]을 완전하게 포함한다.
로봇이 움직인 총 거리는 \(4\)이며, 이보다 적게 움직여서 완벽한 경계를 할 수 없으므로, 답은 \(4\)이다.

예제 2
입력
2 10 3
0 0
출력
7
설명

두 번째 예제의 경우, 다음과 같이 로봇이 움직이는 것이 최적이다.

  1. 현 위치 \(0\)에 놓여 있는 센서 두 개를 모두 싣는다.
  2. \(0\)에 위치한 로봇이 \(1.5\)로 이동한다.
  3. 실은 센서 중 하나를 현 위치에 놓는다.
  4. \(1.5\)에 위치한 로봇이 \(7\)로 이동한다.
  5. 남은 센서 하나를 현 위치에 놓는다.

이와 같이, 로봇이 센서를 정수가 아닌 위치에 놓을 수 있음에 유의하라.

예제 3
입력
1 4 2
2
출력
0
예제 4
입력
1 4 1
2
출력
-1
문제 정보

riseoj 작성

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

평가 및 의견

경계 로봇

개요
출제자 난이도 Diamond II 다이아몬드 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

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

풀이 제출

경계 로봇

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