跳转至

语言月赛 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$ 规模。