/ Vijos / 题库 /

咨询系统

咨询系统

时间限制:1秒  内存限制:256M


【题目描述】

  美以伊三国突然爆发的战争,让全世界都笼罩在石油危机的阴影之下。在这非常时刻,阿拉伯石油商们用奇特的方式售卖他们的石油。他们设计了 \(N(1≤N≤10^5)\) 种售卖方式,为简单起见,把这些售卖方式从 0 到 \(N-1\) 进行编号。第i种售卖方式是把2i桶石油打包一起 \(p_i(1≤p_i≤10^9\),且 \(p_i<p_{i+1}\))元的价钱出售。同一个售卖方式可以使用任意非负整数次。

  作为编程高手,你打算设计一套咨询系统,当顾客输入一个整数 \(x(1≤x≤10^9)\),系统立即告诉顾客购买至少x桶石油的最小成本。

【输入格式】

  第一行包含两个整数 \(N\) 和 \(M\),\(N\) 表示售卖方式数,\(M\) 表示咨询数目 \((1≤M≤10^4)\)。
  接下来的一行包含 \(p_0, p_1,…, p_{N-1},意义如题目描述。
  接下来的 \)M\( 行,每行包含一个整数 \)x$,表示一次咨询。

【输出格式】

  对于每个咨询,输出最小成本。注意:本题中可能需要使用 64 位整数数据类型。

【输入输出样例1】

 Input

2 4
10 15
1
2
6
7

 Output

10
15
45
55

【样例1说明】

  在上面的例子中,石油商提供两个售卖方式:1 桶石油 10 元和 2 桶石油 15 元。
  购买 1 桶石油的最便宜成本就是 1 桶售卖的钱,购买 2 桶石油的最便宜成本就是 2 桶售卖的价格。
  要获得 6 桶石油,最便宜的方式是购买 3 次2 桶售卖,总共 45元。
  要获得 7 桶石油,最便宜的方式是购买 3 次 2 桶售卖和 1 次 1 桶售卖,总共 55元。

【输入输出样例2】

 Input

4 10
11 25 30 70
1
2
3
4
5
6
7
8
15
101

 Output

11
22
30
30
41
52
60
60
120
761

【样例2说明】

  在这个例子中,是由商总共提供 4 个售卖,分别对应 1、2、4、8 桶石油。对于这 10 个询问,对应的输出表示购买至少指定数量石油的最小成本。但是,有时购买超过指定数量的石油反而更便宜,比如要购买 3 桶石油或购买 8 桶油都是这种情况。

【数据限制】

  测试点 1-2:\(N ≤ 2\)
  测试点 3-6:\(N ≤ 10\)
  测试点 7-14:无额外约束。

【来源】

  Mr.he

信息

ID
3204
难度
9
分类
贪心 点击显示
标签
递交数
1
已通过
1
通过率
100%
被复制
2
上传者