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

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

배열의 최대공약수

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

요약
한 개의 연속 구간을 지우고 각 원소를 최대 한 번 1만큼 바꿔 나머지 배열의 최대공약수가 1보다 커지도록 만드는 최소 비용을 구한다.
난이도

어려움10점 중 8점

유형
정수론, 그리디, 동적 계획법, 구현
정답자
아직 제출이 없습니다

문제

정수 NN개로 이루어진 배열 a1,a2,…,aNa_1, a_2, \dots, a_N이 주어진다. 이 배열에 다음 두 종류의 연산을 수행할 수 있다.

  1. 배열에서 길이가 mm인 연속한 구간을 삭제한다.
  2. 배열에 있는 수 aia_i에 1을 더하거나 뺀다.

1번 연산은 전체에서 최대 한 번만 수행할 수 있고, 2번 연산은 각 수마다 최대 한 번만 수행할 수 있다. 1번 연산을 수행할 때는 1≤m<N1 \le m < N이어야 하므로 배열 전체를 삭제할 수는 없다.

1번 연산의 비용은 m×Am \times A이고, 2번 연산의 비용은 한 번에 BB이다. 연산을 모두 마친 뒤 남은 배열의 최대공약수가 1보다 커지도록 만들려고 한다. 이때 필요한 최소 비용을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NN, AA, BB가 주어진다. (1≤N≤1 000 0001 \le N \le 1\,000\,000, 1≤A,B≤1091 \le A, B \le 10^9)

둘째 줄에 배열에 들어 있는 수 a1,a2,…,aNa_1, a_2, \dots, a_N이 주어진다. (2≤ai≤1092 \le a_i \le 10^9)

출력

첫째 줄에 배열의 최대공약수를 1보다 크게 만드는 최소 비용을 출력한다.

힌트

첫 번째 예제는 1번 연산으로 세 번째 수를 삭제하면 최소 비용이 된다.

두 번째 예제는 1번 연산으로 두 번째 수부터 세 번째 수까지 삭제하고, 2번 연산으로 다섯 번째 수를 1 줄이면 최소 비용이 된다.

예제3

  1. 예제 1

    입력
    3 1 4
    4 2 3
    
    예상 출력
    1
    
  2. 예제 2

    입력
    5 3 2
    5 17 13 5 6
    
    예상 출력
    8
    
  3. 예제 3

    입력
    8 3 4
    3 7 5 4 3 12 9 4
    
    예상 출력
    13