语言月赛 202412 题目名没活了
题目分析
- 给定一支队伍的提交记录,共有 $n$ 条,每条包含题目编号 $pid$ 和状态 $state$($0$ 表示未通过,$1$ 表示通过);
- 题目数量为 $p$;
- 我们需要统计这支队伍最终通过了多少道不同的题目;
- 只有在第一次成功通过某题时,提交才是有效,之后即使该题再次通过,也不算新的通过。
解题思路
- 使用一个布尔数组(或整型数组)
passed
长度为 $1005$,用于标记每道题是否已经被通过;
- 初始化所有题目状态为未通过(全局数组自动初始化均为
0
);
- 逐条遍历提交记录:
- 如果当前提交状态为通过 ($state = 1$) ,则将对应的题目编号标记为通过(
1
);
- 无需判断每道题是否是第一次成功通过,反正过了就算 $1$ 次,标记为 $1$ 即可。
- 最终统计
passed
中为 1
的题目个数即为答案。
实现步骤
- 读入 $n, p$;
- 定义全局变量
bool passed[1005]
数组,给每道题是否通过打标记;
- 对 $n$ 条提交依次读取
pid, state
,用两个变量一边输入一边做即可:
- 若
state == 1
,则将 passed[pid] = 1
;
- 统计并输出
passed
数组中 passed[1]
$\sim$ passed[p]
中 $1$ 的数量。
复杂度分析
- 时间复杂度:$O(n)$,只遍历提交列表一次;
- 空间复杂度:$O(p)$,用于存储题目通过状态。
总结
- 利用布尔数组快速判断和更新题目通过状态;
- 简单高效,适合 $n,p \leq 1000$ 规模。