P1042能量获取select

时间限制 1000 ms内存限制 512 MiB通过率 —
显示算法标签贪心 · 优先队列

【题目背景】

完成沉没遗迹的测绘后,Gioush 大队将能够安全带走的能量样本送回了主营地。为了避免不稳定的样本耗尽装置中的能量,CodeDay 需要重新决定处理这些样本的方式。

【题目描述】

检测装置中最初存有 hh 单位能量。传送带上依次经过 nn 份样本,第 ii 份样本具有一个整数 aia_i

当第 ii 份样本经过时,CodeDay 可以选择跳过它,也可以对它进行一次获取。若选择获取,检测装置中的能量会增加 aia_i。这里 aia_i 可以为负数,表示处理这份样本需要消耗能量。

所有样本只能按照传送带上的先后顺序处理。进行每次获取后,检测装置中的能量都不能小于 00

CodeDay 希望完成尽可能多次获取。请你求出最多能够获取多少份样本。

【输入格式】

从文件 select.in\textbf{\textit{select.in}} 中读入数据。

本题包含多组测试数据。

输入的第一行包含两个非负整数 c,Tc,T,分别表示测试点编号与测试数据的组数。c=0c=0 表示该测试点为样例。

对于每组测试数据:

第一行包含两个整数 n,hn,h,分别表示样本数量与检测装置的初始能量。

第二行包含 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n,依次表示每份样本带来的能量变化。

【输出格式】

输出到文件 select.out\textbf{\textit{select.out}} 中。

对于每组测试数据输出一行一个整数,表示最多能够完成的获取次数。

{{ render(json.dumps('\clearpage'), 'noi') }}

【样例 1 输入】

0 35 3-4 2 -1 -2 36 04 -5 2 -1 -1 -14 1-1 -1 0 -1

【样例 1 输出】

452

【说明/提示】

【样例 1 解释】

第一组测试数据可以跳过第一份样本,再依次获取其余 44 份样本,处理过程中能量始终不小于 00

【样例 2】

见选手目录下的 select/select2.in\textbf{\textit{select/select2.in}}select/select2.ans\textbf{\textit{select/select2.ans}}

该组样例符合测试点 151\sim 5 的数据范围。

【样例 3】

见选手目录下的 select/select3.in\textbf{\textit{select/select3.in}}select/select3.ans\textbf{\textit{select/select3.ans}}

该组样例符合测试点 6106\sim 10 的数据范围。

【样例 4】

见选手目录下的 select/select4.in\textbf{\textit{select/select4.in}}select/select4.ans\textbf{\textit{select/select4.ans}}

该组样例符合测试点 111511\sim 15 的数据范围。

【样例 5】

见选手目录下的 select/select5.in\textbf{\textit{select/select5.in}}select/select5.ans\textbf{\textit{select/select5.ans}}

该组样例符合测试点 162016\sim 20 的数据范围。

【数据范围】

对于 100%100\% 的数据,保证 1T1001\leq T\leq 1001n2×1051\leq n\leq 2\times 10^5,单个测试点内 n2×105\sum n\leq 2\times 10^50h10150\leq h\leq 10^{15}109ai109-10^9\leq a_i\leq 10^9

测试点编号nn特殊性质
151\sim 510\leq 10
6106\sim 102×103\leq 2\times 10^3
111511\sim 152×105\leq 2\times 10^5
162016\sim 202×105\leq 2\times 10^5

特殊性质:每组测试数据中,所有满足 ai0a_i\geq 0 的样本都出现在满足 ai<0a_i<0 的样本之前。

【题解】

已公开 1 篇题解,官方题解会优先显示。

查看题解