RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
KOI00037

블록 쌓기

Platinum II 플래티넘 II
난이도
2s
시간 제한
1024MB
메모리 제한
1
맞았습니다!!
1
제출 수
100.0%
정답률
레이팅

의견: 0

설명

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

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

  • 각 칸에 쌓인 블록의 개수는 \(L\) 이상 \(R\) 이하이다.
  • 각 칸에 쌓인 블록의 개수는 단조증가한다: \(1 ≤ i ≤ N - 1\)에 대해 \(i\)번 칸에 쌓인 블록의 개수는 \(i + 1\)번 칸에 쌓인 블록의 개수 이하이다.

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

제약
  • 주어지는 수는 모두 정수이다.
  • \(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\))
입력 형식

첫 번째 줄에 \(N\), \(L\), \(R\)이 공백으로 구분되어 주어진다.

두 번째 줄에 \(A_1\), \(\dots\), \(A_N\)이 공백으로 구분되어 주어진다.

출력 형식

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

서브태스크
서브태스크점수설명

1

7점

\(N \le 50\), \(R - L \le 1\).

2

6점

\(N \le 4\), \(R - L \le 50\).

3

11점

\(N \le 10\), \(A_1 + \cdots + A_N \le 10\).

4

11점

\(N \le 50\), \(A_1 + \cdots + A_N \le 50\).

5

30점

\(N \le 50\), \(R \le 50\).

6

10점

\(N \le 50\), \(R - L \le 50\).

7

25점

추가 제약 조건 없음.

예제 1
입력
5 3 5
2 0 9 1 4
출력
7
예제 2
입력
10 3 8
2 7 9 10 2 2 2 8 3 8
출력
25
예제 3
입력
10 6 7
10 7 5 4 4 3 9 4 9 7
출력
20
예제 4
입력
3 2 3
1 1 1
출력
-1
문제 정보

riseoj 작성

출처 올림피아드 > 한국정보올림피아드 > KOI 2023 > 1차 대회 > 고등부 3번

평가 및 의견

블록 쌓기

개요
출제자 난이도 Platinum II 플래티넘 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

블록 쌓기

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8