CF2025D.Attribute Checks

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

想象一个游戏,你扮演的角色有两个属性:“力量”和“智力”,初始时这两个属性的等级都是零。

在游戏过程中,你会获得 mm 个属性点,每个属性点可以让你将任意一个属性提升一级。但有时你会遇到所谓的“属性检测”:如果你对应的属性足够高,你就能通过,否则就会失败。

经过一番努力,你终于整理出了一份包含所有获得属性点和遇到检测的完整记录清单。现在你想知道:如果你合理分配属性点,在一次游戏过程中最多能通过多少次属性检测?

注意,你不能改变记录的顺序。

输入格式

第一行包含两个整数 nn 和 mm(1≤m≤50001 \le m \le 5000;m<n≤2⋅106m < n \le 2 \cdot 10^6),表示记录的总数和你在游戏中能获得的属性点总数。

第二行包含 nn 个整数 r1,r2,…,rnr_1, r_2, \dots, r_n(−m≤ri≤m-m \le r_i \le m),其中 rir_i 表示第 ii 条记录的类型:

  • 如果 ri=0r_i = 0,表示获得一个属性点,你可以选择将其加到力量或智力上;
  • 如果 ri>0r_i > 0,表示一次智力检测:如果你的智力等级大于等于 ∣ri∣|r_i|,则通过;
  • 如果 ri<0r_i < 0,表示一次力量检测:如果你的力量等级大于等于 ∣ri∣|r_i|,则通过。

输入数据还保证:序列 r1,r2,…,rnr_1, r_2, \dots, r_n 中恰好有 mm 个元素等于 00。

输出格式

输出一个整数,表示你最多能通过多少次属性检测。

输入输出样例

  • 输入#1

    10 5
    0 1 0 2 0 -3 0 -4 0 -5

    输出#1

    3
  • 输入#2

    3 1
    1 -1 0

    输出#2

    0
  • 输入#3

    9 3
    0 0 1 0 2 -3 -2 -2 1

    输出#3

    4

说明/提示

在第一个样例中,最优策略是每个点都加到力量上,这样会失败 22 次智力检测,但能通过 33 次力量检测。

在第二个样例中,你会错过所有检测,因为第一个属性点是在检测之后获得的。

在第三个样例中,一种最优策略如下:

  1. 第一个点加到智力上;
  2. 第二个点加到力量上;
  3. 第三个点加到力量上;

这样你能通过 22 次智力检测(r3r_3 和 r9r_9)和 22 次力量检测(r7r_7 和 r8r_8)。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页