A24635.分面包

普及+/提高

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

时间限制:1000ms
内存限制:128MB

有一条长度为 LL 的面包,现在要将其切割并分给 NN 个孩子。
ii 个孩子 (1iN)(1 \leq i \leq N) 想要长度为 AiA_i 的面包。

重复以下操作,将面包切割成长度为 A1,A2,,ANA_1, A_2, \ldots, A_N 的面包分给孩子们。

  • 选择一条长度为 kk 的面包和一个介于 11k1k-1 之间(含)的整数 xx。将面包切割成长度为 xxkxk-x 的两条面包。
  • 此操作的花费为 kk,与 xx 的值无关。

每个孩子 ii 必须得到一条长度正好为 AiA_i 的面包,但允许留下未分配的面包。

计算将面包分配给所有孩子所需的最小花费。

数据范围\large{数据范围}

  • 2N2×1052 \leq N \leq 2\times 10^5
  • 1Ai1091\leq A_i\leq 10^9
  • A1+A2++ANL1015A_1+A_2+\cdots+A_N\leq L\leq 10^{15}
  • 所有输入数值均为整数。

输入格式

对于每个测试文件输入格式如下:

N L\tt{N\ L}
A1 A2  AN\tt{A_1\ A_2\ \ldots\ A_N}

输出格式

输出向所有孩子分发面包所需的最低花费。

输入输出样例

  • 输入#1

    5 7
    1 2 1 2 1

    输出#1

    16
  • 输入#2

    3 1000000000000000
    1000000000 1000000000 1000000000

    输出#2

    1000005000000000

说明/提示

样例 11
可以按如下方法为孩子们切面包。

  • 选择长度为 77 的面包,令 x=3x=3,将其切成长度为 3344 的面包,成本为 77
  • 选择长度为 33 的面包,令 x=1x=1,将其切成长度为 1122 的面包,成本为 33 。把前者给第 11 个孩子。
  • 选择长度为 22 的面包,令 x=1x=1,将其切成长度为 11 的两个面包,成本为 22 。把它们分给第 33 个和第 55 个孩子。
  • 选择长度为 44 的面包,令 x=2x=2,将其切成长度为 22 的两个面包,成本为 44 。把它们分给第 22 个和第 44 个孩子。

总共的花费为 7+3+2+4=167+3+2+4=16,无法找到花费更少的切割方案。

样例 22
注意,每个孩子 ii 必须收到一个长度正好为 AiA_i 的面包。

首页