在「小慕」的魔法项目中,每个项目都有多个,每个代码仓里存放着用不同编程语言编写的咒语代码(以代码行数衡量)。小慕需要一个统计系统来管理这些代码仓的代码量,并随时查询各语言的代码贡献情况。 你的任务是实现一个代码量统计系统,支持以下功能: 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