AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0011. 魔法代码量统计系统

中等通过率 65% · 提交 125 · 通过 81
哈希表排序模拟

在「小慕」的魔法项目中,每个项目都有多个,每个代码仓里存放着用不同编程语言编写的咒语代码(以代码行数衡量)。小慕需要一个统计系统来管理这些代码仓的代码量,并随时查询各语言的代码贡献情况。 你的任务是实现一个代码量统计系统,支持以下功能: 1. 初始化系统 创建系统时,将项目与其代码仓的绑定关系输入,并初始化所有代码仓的代码量为 `0`。 2. 调整代码量 修改某代码仓中某种语言的代码行数,支持增加或减少,保证任何语言的代码量不会为负。 3. 统计语言排行 查询某个项目或所有项目中编程语言的代码量排行,按以下规则排序并输出 列表: - ; - 如果代码量相同,则按语言 ID 升序排列; - 只输出代码量大于 `0` 的语言 ID。

提示:带虚线的词点一下有通俗解释。

输入描述

第一行输入一个整数 `Q`,表示操作的总次数(1 ≤ `Q` ≤ 1000)。 接下来输入 `Q` 行,每行表示一个操作,具体格式如下: 1. **初始化系统** 第一行为字符串 `CodeStatsSystem`,表示初始化操作。 - 第二行输入一个整数 `m`,表示产品的数量(1 ≤ `m` ≤ 100)。 - 随后输入 `m` 组数据,每组数据两行: - 第一行输入一个整数 `product_id`,表示产品 ID(1 ≤ `product_id` ≤ 100)。 - 第二行输入一个整数 `repo_ids_size`,表示该产品拥有的代码仓数量,以及 `repo_ids_size` 个代码仓 ID(0 ≤ `repo_id` ≤ 999)。 输出固定字符串 `null`。 保证系统在第一次初始化并且只初始化一次。 2. **调整代码量** 第一行为字符串 `change_code_lines`。 - 接下来三行输入三个整数 `repo_id`、`language_id` 和 `code_lines`: - `repo_id`:代码仓 ID(0 ≤ `repo_id` ≤ 999); - `language_id`:语言 ID,范围为 `[0, 6]`,分别对应 "C"、"C++"、"Go"、"Java"、"JavaScript"、"Python"、"Rust"; - `code_lines`:代码行变化量(`-100000 ≤ code_lines ≤ 100000`)。 输出该产品中该语言的当前代码行数。 3. **统计语言排行** 第一行为字符串 `stat_language`。 - 第二行输入一个整数 `product_id`: - `product_id = 0` 表示统计所有产品; - `product_id > 0` 表示统计指定产品。 输出语言 ID 列表,按排序规则排列,用空格分隔。如果没有符合条件的语言,输出空行。

输出描述

针对每个操作,输出结果: 1. `CodeStatsSystem` 操作输出固定字符串 `null`; 2. `change_code_lines` 操作输出一个整数,表示调整后的代码行数; 3. `stat_language` 操作输出一行整数,表示符合条件的语言 ID 列表。

示例

示例 1

输入

8
CodeStatsSystem
3
10
2
102 101
12
1
122
22
1
221
change_code_lines
221
3
2500
change_code_lines
102
2
2100
change_code_lines
101
1
2000
stat_language
10
stat_language
22
change_code_lines
102
2
-100
stat_language
0

输出

null
2500
2100
2000
2 1
3
2000
3 1 2

说明:obj = CodeStatsSystem([ProductRepos(10, [102, 101]), ProductRepos(12, [122]), ProductRepos(22, [221])]) print(obj.change_code_lines(221, 3, 2500)) print(obj.change_code_lines(102, 2, 2100)) print(obj.change_code_lines(101, 1, 2000)) print(obj.stat_language(10)) print(obj.stat_language(22)) print(obj.change_code_lines(102, 2, -100)) print(obj.stat_language(0))

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
魔法代码量统计系统 - 样例图解 产品 10 产品 12 产品 22 代码仓 102 代码仓 101 代码仓 122 代码仓 221 语言2: 2100行 语言1: 2000行 语言3: 2500行 统计语言排行(产品10): 2 1 代码量降序,相同则语言ID升序
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「魔法代码量统计系统」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。