#P14705. [Bulgarian2017]Monopoly
[Bulgarian2017]Monopoly
题目描述
Eli 因为设计游乐园获得了一大笔钱,现在她想拿这笔钱去投资。
她决定购买自己所在城市主街上一段连续的商铺。
通常来说,购买一个商铺需要向当前拥有者支付一定金额。但其中有些商铺长期亏损,店主甚至愿意倒贴钱把商铺脱手。于是,如果主街上共有 N 个商铺,我们可以用一个整数序列 A1, A2, ..., AN 来表示购买每个商铺所需的金额:
- 若
Ai > 0,表示 Eli 需要支付Ai; - 若
Ai < 0,表示 Eli 反而会收到-Ai。
现在 Eli 想知道:在最多只愿意支付 M 元的前提下,她最多能购买多少个连续的商铺。
请编写程序 monopoly,帮助她作出最优决策。
输入格式
第一行输入两个整数 N 和 M,分别表示商铺总数和 Eli 的预算。
第二行输入 N 个整数 A1, A2, ..., AN,表示按街道顺序给出的各商铺价格。
输出格式
输出两个整数:
- Eli 最多可以购买的连续商铺数量;
- 在达到该最大数量的所有方案中,最左端商铺的最小编号(编号从
1开始)。
保证 Eli 至少可以买下一个商铺。
数据范围
1 <= N <= 5000001 <= M <= 1000000000-1000000 <= Ai <= 1000000
样例
输入
15 666
101 42 -132 17 404 -13 55 222 89 11 -66 91 -9 21 4
输出
10 2
样例解释
Eli 可以从编号为 2 的商铺开始,连续购买 10 个商铺。对应总花费为:
42 - 132 + 17 + 404 - 13 + 55 + 222 + 89 + 11 - 66 = 629
这不超过她的预算 666。
注意,从编号 6 开始她同样也能买下 10 个商铺,而且总花费更低;但题目要求输出最小的起始编号,所以答案仍然是 2。
如果她的预算再多 3 元,变成 669,那么她就能多买一个商铺(从编号 3 开始)。