블록 쌓기
Unrated
한국어
Language
Contribute a translation- Time limit
- 2000 ms
- Memory limit
- 1024 MB
- Submissions
- 0
- Correct
- 0
- Solved by
- 0
- AC rate
- —
Statement
블록을 쌓는 놀이를 하고 있다. 블록을 위로 쌓을 수 있는 칸들이 총 $N$개 있으며, $1$번 칸부터 $N$번 칸까지 순서대로 붙어 있다.
현재 $i$번 칸에는 $A_i$개의 블록이 쌓여 있다. 현재 블록들이 쌓인 모양이 난잡하다고 생각해, 다음과 같은 조건들을 만족하도록 블록들을 옮기려고 한다.
- 각 칸에 쌓인 블록의 개수는 $L$ 이상 $R$ 이하이다.
- 각 칸에 쌓인 블록의 개수는 단조증가한다: $1 \le i \le N - 1$에 대해 $i$번 칸에 쌓인 블록의 개수는 $i + 1$번 칸에 쌓인 블록의 개수 이하이다.
여러분은 어떠한 칸의 블록을 인접한 칸으로 옮기는 것을 반복해 목표를 달성하려고 한다. 목표를 달성하는 것이 가능한지 판별하고, 가능한 경우 블록을 옮기는 횟수의 최솟값을 구해야 한다.
Constraints
- $1 \le N \le 100$
- $0 \le L \le R \le 10^9$
- $R - L \le 100$
- $0 \le A_i \le 10^9$ $(1 \le i \le N)$
- 주어지는 수는 모두 정수이다.
Subtasks
- (7점) $N \le 50$, $R - L \le 1$
- (6점) $N \le 4$, $R - L \le 50$
- (11점) $N \le 10$, $A_1 + \cdots + A_N \le 10$
- (11점) $N \le 50$, $A_1 + \cdots + A_N \le 50$
- (30점) $N \le 50$, $R \le 50$
- (10점) $N \le 50$, $R - L \le 50$
- (25점) 추가 제약 조건 없음.
Input
첫 번째 줄에 $N$, $L$, $R$이 공백으로 구분되어 주어진다.
두 번째 줄에 $A_1, \dots, A_N$이 공백으로 구분되어 주어진다.
Output
목표를 달성하는 것이 불가능하다면 $-1$을 출력한다. 목표를 달성하는 것이 가능하다면 블록을 옮기는 횟수의 최솟값을 출력한다.
Examples
Sample input 1
10 6 7 10 7 5 4 4 3 9 4 9 7
Sample output 1
20
Sample input 2
3 2 3 1 1 1
Sample output 2
-1
Sample input 3
5 3 5 2 0 9 1 4
Sample output 3
7
Sample input 4
10 3 8 2 7 9 10 2 2 2 8 3 8
Sample output 4
25
Tags
No tags yet