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

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

블록 쌓기

면접 대비

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

요약
인접한 칸 사이로 블록을 옮겨 각 칸의 블록 수가 L 이상 R 이하이면서 단조증가하도록 만들고, 옮기는 횟수의 최솟값을 구하거나 불가능하면 -1을 출력한다.
난이도

보통10점 중 6점

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

문제

블록을 쌓는 놀이를 하고 있다. 블록을 위로 쌓을 수 있는 칸들이 총 NN개 있으며, 11번 칸부터 NN번 칸까지 순서대로 붙어 있다.

현재 ii번 칸에는 A_iA\_i개의 블록이 쌓여 있다. 현재 블록들이 쌓인 모양이 난잡하다고 생각해, 다음과 같은 조건들을 만족하도록 블록들을 옮기려고 한다.

  • 각 칸에 쌓인 블록의 개수는 LL 이상 RR 이하이다.
  • 각 칸에 쌓인 블록의 개수는 단조증가한다: 1≤i≤N−11 ≤ i ≤ N - 1에 대해 ii번 칸에 쌓인 블록의 개수는 i+1i + 1번 칸에 쌓인 블록의 개수 이하이다.

여러분은 어떠한 칸의 블록을 인접한 칸으로 옮기는 것을 반복해 목표를 달성하려고 한다. 목표를 달성하는 것이 가능한지 판별하고, 가능한 경우 블록을 옮기는 횟수의 최솟값을 구해야 한다.

입력

첫 번째 줄에 NN, LL, RR이 공백으로 구분되어 주어진다.

두 번째 줄에 A_1A\_1, …\dots, A_NA\_N이 공백으로 구분되어 주어진다.

출력

목표를 달성하는 것이 불가능하다면 −1-1을 출력한다. 목표를 달성하는 것이 가능하다면 블록을 옮기는 횟수의 최솟값을 출력한다.

제한

  • 1≤N≤1001 ≤ N ≤ 100
  • 0≤L≤R≤1090 ≤ L ≤ R ≤ 10^9
  • R−L≤100R - L ≤ 100
  • 0≤A_i≤1090 ≤ A\_i ≤ 10^9 (1≤i≤N1 ≤ i ≤ N)
  • 주어지는 수는 모두 정수이다.

예제4

  1. 예제 1

    입력
    5 3 5
    2 0 9 1 4
    
    예상 출력
    7
    
  2. 예제 2

    입력
    10 3 8
    2 7 9 10 2 2 2 8 3 8
    
    예상 출력
    25
    
  3. 예제 3

    입력
    10 6 7
    10 7 5 4 4 3 9 4 9 7
    
    예상 출력
    20
    
  4. 예제 4

    입력
    3 2 3
    1 1 1
    
    예상 출력
    -1