A24635.分面包
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
时间限制:1000ms
内存限制:128MB
有一条长度为 L 的面包,现在要将其切割并分给 N 个孩子。
第 i 个孩子 (1≤i≤N) 想要长度为 Ai 的面包。
重复以下操作,将面包切割成长度为 A1,A2,…,AN 的面包分给孩子们。
- 选择一条长度为 k 的面包和一个介于 1 和 k−1 之间(含)的整数 x。将面包切割成长度为 x 和 k−x 的两条面包。
- 此操作的花费为 k,与 x 的值无关。
每个孩子 i 必须得到一条长度正好为 Ai 的面包,但允许留下未分配的面包。
计算将面包分配给所有孩子所需的最小花费。
数据范围
- 2≤N≤2×105
- 1≤Ai≤109
- A1+A2+⋯+AN≤L≤1015
- 所有输入数值均为整数。
输入格式
对于每个测试文件输入格式如下:
N L
A1 A2 … AN
输出格式
输出向所有孩子分发面包所需的最低花费。
输入输出样例
输入#1
5 7 1 2 1 2 1
输出#1
16
输入#2
3 1000000000000000 1000000000 1000000000 1000000000
输出#2
1000005000000000
说明/提示
样例 1:
可以按如下方法为孩子们切面包。
- 选择长度为 7 的面包,令 x=3,将其切成长度为 3 和 4 的面包,成本为 7 。
- 选择长度为 3 的面包,令 x=1,将其切成长度为 1 和 2 的面包,成本为 3 。把前者给第 1 个孩子。
- 选择长度为 2 的面包,令 x=1,将其切成长度为 1 的两个面包,成本为 2 。把它们分给第 3 个和第 5 个孩子。
- 选择长度为 4 的面包,令 x=2,将其切成长度为 2 的两个面包,成本为 4 。把它们分给第 2 个和第 4 个孩子。
总共的花费为 7+3+2+4=16,无法找到花费更少的切割方案。
样例 2:
注意,每个孩子 i 必须收到一个长度正好为 Ai 的面包。