등차수열 변환

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

요약
수열 B의 각 원소를 최대 한 번 ±1만 바꿔서 등차수열로 만들 때 필요한 최소 연산 횟수를 구한다.
난이도

보통10점 중 7점

유형
수학, 구현, 완전 탐색, 그리디
정답자
아직 제출이 없습니다

문제

크기가 NN인 수열 A=[A1,A2,…,AN]A = [A_1, A_2, \dots, A_N]이 있을 때, 모든 1≤i<N1 \le i < N에 대해서 Ai+1−AiA_{i+1} - A_i가 모두 같으면 등차수열이라고 한다. 예를 들어 [3][3], [6,6,6][6, 6, 6], [2,8,14,20][2, 8, 14, 20], [6,4,2][6, 4, 2]는 등차수열이고, [4,5,4][4, 5, 4], [6,3,1][6, 3, 1]은 등차수열이 아니다.

수열 B=[B1,B2,…,BN]B = [B_1, B_2, \dots, B_N]을 등차수열로 변환하려고 한다. 각각의 수에는 연산을 최대 한 번 적용할 수 있다. 연산은 두 가지가 있는데, 1을 더하거나 1을 빼는 것이다. 수열 BB를 등차수열로 변환하기 위해 필요한 연산 횟수의 최솟값을 구해보자.

입력

첫째 줄에 수열 BB의 크기 N(1≤N≤105)N(1 \le N \le 10^5)이 주어진다. 둘째 줄에는 B1,B2,…,BN(1≤Bi≤109)B_1, B_2, \dots, B_N(1 \le B_i \le 10^9)이 주어진다.

출력

수열 BB를 등차수열로 변환하기 위한 연산 횟수의 최솟값을 출력한다. 등차수열로 변환할 수 없다면 -1을 출력한다.

예제4

  1. 예제 1

    입력
    4
    24 21 14 10
    
    예상 출력
    3
    
  2. 예제 2

    입력
    2
    5 5
    
    예상 출력
    0
    
  3. 예제 3

    입력
    3
    14 5 1
    
    예상 출력
    -1
    
  4. 예제 4

    입력
    5
    1 3 6 9 12
    
    예상 출력
    1