当前位置: 首页 > news >正文

HOJ.编程语言管理系统

题目

请实现一个对代码仓中各编程语言的代码量进行统计的系统,支持以下功能:

功能说明

初始化

CodeStatsSystem(products[]) – 初始化产品及其代码仓关系,所有代码仓的代码量初始为 0:

  • products[i] = [productId, repoIds[]] 表示一个产品及其代码仓列表
  • 产品、代码仓均是全局唯一的
  • 一个代码仓仅会归属某一个产品
  • 一个代码仓内可能有多种语言

代码行数变更

changeCodelines(int repoId, int languageId, int codeline) – 代码仓 repoId 中某种语言 languageId 的代码行变化量为 codeline(正值表示增加,负值表示减少)。最后返回此代码仓中该语言的代码总行数。

  • 用例保证代码仓已存在
  • 一个代码仓中某语言的代码行不会减少为负值

统计功能

statLanguage(int productId) – 统计产品 productId 所用到的各语言的代码总行数,并按要求返回语言id列表。

  • productId 为 0 表示所有产品,非 0 表示指定的产品(用例保证产品已存在)
  • 返回要求:
    • 只返回代码量大于 0 的语言
    • 优先按语言的代码量降序
    • 若代码量相同,则再按语言id升序

输入输出规范

输入

  • 每行表示一个函数调用
  • 初始化函数仅首行调用一次
  • 累计函数调用不超过1000次

数据范围

  • 1 <= products.length <= 100
  • 0 < products[i].productId <= 100
  • 1 <= repoIds.length <= 10
  • 0 <= repoIds[j]、repoId < 1000(repoId ∈ repoIds)
  • -100000 <= codeline <= 100000
  • languageId 取值范围 0~6,分别表示:
    • 0: “c”
    • 1: “c++”
    • 2: “go”
    • 3: “java”
    • 4: “javascript”
    • 5: “python”
    • 6: “rust”
  • 0 <= productId <= 100

输出

  • 答题时按照函数/方法原型中的要求(含返回值)进行实现
  • 输出由框架完成(其中首行固定输出 null)

算法标签: 模拟

思路

构建有映射关系, 有多个产品, 每个产品有 i d id id和对应管理的代码仓, 每个代码仓有多种语言的代码, 然后进行模拟

代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>using namespace std;typedef pair<int, int> PII;
const int N = 110, M = 1010, K = 7;vector<pair<int, vector<int>>> vec;
int sto[M][7];
vector<int> pro[N];
vector<int> ids;bool cmp(const PII &a, const PII &b) {auto &[id1, val1] = a;auto &[id2, val2] = b;if (val1 == val2) return id1 < id2;return val1 > val2;
}class CodeStatsSystem {
public://存储产品id和对应的代码仓列, 一个代码仓仅会归属于一个产品, 一个代码仓可能有多个语言CodeStatsSystem(const vector<pair<int, vector<int>>> &products) {memset(sto, 0, sizeof sto);vec.clear();ids.clear();for (int i = 0; i < N; ++i) pro[i].clear();vec = products;for (auto &[id, tmp] : vec) {ids.push_back(id);pro[id] = tmp;}}//对代码仓中某个语言的代码行数进行变化int ChangeCodelines(int repoId, int languageId, int codeline) {int &val = sto[repoId][languageId];if (val + codeline < 0) return val;val += codeline;return val;}//统计产品用的各种语言的代码总数, 0代表返回所有产品, 只返回代码量大于0的语言, 降序, 代码量相同按照id升序vector<int> StatLanguage(int productId) {vector<PII> cnt(K);for (int i = 0; i < K; ++i) cnt[i].first = i, cnt[i].second = 0;if (productId == 0) {for (int id : ids) {for (int sto_id : pro[id]) {for (int i = 0; i < K; ++i) {cnt[i].second += sto[sto_id][i];}}}}else {for (int sto_id : pro[productId]) {for (int i = 0; i < K; ++i) {cnt[i].second += sto[sto_id][i];}}}sort(cnt.begin(), cnt.end(), cmp);vector<int> ans;for (int i = 0; i < K; ++i) {auto &[id, val] = cnt[i];if (val > 0) ans.push_back(id);}return ans;}
};

相关文章:

  • 肯·汤普逊:UNIX之父与现代操作系统的开路人
  • Linux解压tar.gz包的正确姿势(附赠防抓狂指南)
  • 14-DevOps-快速部署Kubernetes
  • ‌Linux trap 命令详解
  • 颠覆传统!LSTM+transformer上大分!参数直降45.5%,精度远超SOTA!
  • 测试模版x
  • 【HFP】蓝牙HFP协议中音频连接转移与拨号功能的深度解析
  • 极域教师管理CMD命令操作
  • 数智飞轮:AI时代企业增长的核心密码
  • MYSQL 常用数值函数 和 条件函数 详解
  • 微信小程序蓝牙连接打印机打印单据完整Demo【蓝牙小票打印】
  • 赶紧收藏!教您如何用 GitHub 账号,获取永久免费的 Docker 容器!!快速搭建我们的网站/应用!
  • Shell 脚本入门:从零开始写自动化脚本
  • 如何理解计算机网卡完成数据传输的串并转换
  • 5.4 AgentLite:轻量级库,便于构建任务导向的LLM Agent系统
  • Android学习总结之Glide篇(缓存和生命周期)
  • 【特殊场景应对8】LinkedIn式动态简历的利弊分析:在变革与风险间走钢丝
  • A Comprehensive Survey of Spoken Language Models
  • [自记录]一次Nvidia显卡的AI容器基础镜像制作过程(含Torch版本和ONNXRuntime版本选择)
  • 【阿里云大模型高级工程师ACP习题集】2.5 优化RAG应用提升问答准确度(⭐️⭐️⭐️ 重点章节!!!)
  • 现场|西岸美术馆与蓬皮杜启动新五年合作,新展今开幕
  • 习近平:在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话
  • 商务部:4月份以来的出口总体延续平稳增长态势
  • 一季度全国城镇新增就业308万人
  • 在差异中建共鸣,《20世纪美国文学思想研究》丛书出版
  • 这场迪图瓦纪念拉威尔的音乐会,必将成为乐迷反复品味的回忆