60007 장애물 Silver V

시간 제한: 1초 메모리 제한: 2048MB

문제

당신은 친구들과 함께 운동장에서 장애물 뛰기 놀이를 하고 있다. 놀이는 수직선 위의 위치 00에서 시작하며, 각 장애물은 왼쪽부터 차례로 X1<X2<<XNX_1 < X_2 < \dots < X_N 에 놓여 있다. X11X_1 ≥ 1이다.

당신의 목표는 수직선 위에 놓인 NN개의 장애물을 모두 뛰어넘는 것이다. 이를 위해 당신은 다음과 같은 두 가지 행동을 할 수 있다:

  • 오른쪽으로 11만큼 걸어간다. 즉, 위치 xx에서 시작했다면 x+1x + 1에 도착한다.
  • 오른쪽으로 22만큼 점프한다. 즉, 위치 xx에서 시작했다면 x+2x + 2에 도착한다.

장애물을 뛰어넘었다는 것은, 장애물을 점프로 넘어갔다는 것을 뜻한다. 다시 말해, 위치 XiX_i 에 있는 장애물을 뛰어넘으려면 반드시 위치 Xi1X_i − 1에서 오른쪽으로 22만큼 점프해서 위치 Xi+1X_i + 1에 도착해야 한다.

예를 들어, 아래 그림과 같이 수직선 위의 위치 22, 55, 1111에 장애물이 놓여 있다고 가정하자.

다음과 같은 방법들로 장애물을 모두 넘어갈 수 있다. 아래에서 는 걷기, 는 점프를 의미한다.

  • 방법 11: 013467910120 → 1 ⟹ 3 → 4 ⟹ 6 → 7 ⟹ 9 → 10 ⟹ 12 (88회 이동, 장애물 33개 넘음)

  • 방법 22: 01346810120 → 1 ⟹ 3 → 4 ⟹ 6 ⟹ 8 ⟹ 10 ⟹ 12 (77회 이동, 장애물 33개 넘음)

하지만, 다음과 같은 방법들은 장애물을 모두 넘어갈 수 없다.

  • 방법 33: 0246810120 ⟹ 2 ⟹ 4 ⟹ 6 ⟹ 8 ⟹ 10 ⟹ 12 (66회 이동, 장애물 22개 넘음)

  • 방법 44: 01357910120 → 1 ⟹ 3 ⟹ 5 ⟹ 7 ⟹ 9 → 10 ⟹ 12 (77회 이동, 장애물 22개 넘음)

  • 방법 55: 0134570 → 1 ⟹ 3 → 4 → 5 ⟹ 7 (55회 이동, 장애물 11개 넘음)

각 예시에서, 이동 횟수는 걸어간 횟수와 점프한 횟수의 합이다. 이 예시에서, 방법 22가 최소 이동 횟수로 장애물을 모두 넘어갈 수 있는 최적의 방법이다.

당신은 이동 횟수를 최소화하여 모든 장애물을 넘어가는 최적의 방법을 찾고자 한다. 단, 주어진 두 행동만으로 모든 장애물을 넘어가는 것이 불가능한 경우도 있다.

입력

첫 번째 줄에는 NN이 주어진다.

두 번째 줄에는 NN개의 정수 X1,X2,,XNX_1 , X_2 , \cdots , X_N이 공백을 사이에 두고 차례대로 주어진다.

출력

모든 장애물을 넘어갈 수 없다면, -1을 출력한다.

모든 장애물을 넘어갈 수 있다면, 모든 장애물을 넘기 위해 필요한 최소 이동 횟수를 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1N2500001 ≤ N ≤ 250\, 000
  • 1X1<X2<<XN2500001 ≤ X_1 < X_2 < \dots < X_N ≤ 250\, 000

서브태스크

번호배점제한
17N=1N = 1, X5X ≤ 5
212N=1N = 1, X5000X ≤ 5\, 000
323N5000N ≤ 5\, 000, 1iN1 ≤ i ≤ N인 모든 ii에 대하여 X5000X ≤ 5\, 000
458추가 제약 조건 없음.

예제 입출력

예제 입력 1
3
2 5 11
예제 출력 1
7
예제 입력 2
3
7 20 25
예제 출력 2
14
예제 입력 3
4
1 4 5 8
예제 출력 3
-1

출처

올림피아드 한국정보올림피아드 KOI 2025 2차 초등부 1번
solution.cpp
에디터 불러오는 중...