第 2 题 积木堆叠 (block)
时间限制 1.0 s · 空间限制 256 MB · 210 个测试点 · 全文比较(过滤行末空格及文末回车)
本题使用文件输入输出:输入文件 block.in,输出文件 block.out。
按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。
题目描述
正在进行一项积木堆叠的游戏。共有 N 个可以向上堆积积木的位置,从第 1 个格子到第 N 个格子依次排列。
当前第 i 个格子上堆积了 Ai 个积木。由于当前堆积的形状杂乱无章,想要通过以下条件将其整理:
- 每个格子上的积木数量要在 L 到 R 之间(包括 L 和 R)。
- 每个格子上的积木数量要单调不减:对于 1≤i≤N−1,第 i 个格子上的积木数量不应大于第 i+1 个格子的数量。
你可以将某个格子上的积木移动到相邻的格子中,反复进行操作以达成目标。现在需要判断是否可以实现目标。如果可以,还要输出最小的移动次数。
输入格式
第一行包含三个整数 N、L、R,以空格分隔。
第二行包含 N 个整数 A1,A2,…,AN,表示每个格子当前的积木数量。
输出格式
若无法达成目标,输出 −1。若可以达成目标,输出最小的积木移动次数。
样例
样例 1
输入:
输出:
样例 2
输入:
文本
10 3 8
2 7 9 10 2 2 2 8 3 8
输出:
样例 3
输入:
文本
10 6 7
10 7 5 4 4 3 9 4 9 7
输出:
样例 4
输入:
输出:
提示
限制条件
- 1≤N≤100
- 0≤L≤R≤109
- R−L≤100
- 0≤Ai≤109(1≤i≤N)
- 所有输入的数值均为整数。
子问题
- (7 分)N≤50,R−L≤1
- (6 分)N≤4,R−L≤50
- (11 分)N≤10,∑Ai≤10
- (11 分)N≤50,∑Ai≤50
- (30 分)N≤50,R≤50
- (10 分)N≤50,R−L≤50
- (25 分)无额外限制