2025华为软件精英挑战赛2600w思路分享

news2025/4/24 4:15:54

这里写自定义目录标题

  • 得分展示
  • 对象定义
  • 请求价值计算
  • 时间同步
  • 删除操作
  • 完整思路

得分展示

在这里插入图片描述
请添加图片描述

对象定义

// 将一个磁盘划分为多个基于标签聚合的区块
class Block{
public:
    int tag = 0;   // 区块标签
    int start_pos;
    int end_pos;
    int id;
    int use_size = 0;
    int v;

    // 为区块确定范围
    Block(int id, int v) : id(id), v(v){
        start_pos = (id - 1) * BLOCK_SIZE + 1;
        end_pos = min(id * BLOCK_SIZE, v);
    }
};

class Object{
public:
    int disk[REP_NUM + 1];    // 对象的三个副本磁盘 id
    int *unit[REP_NUM + 1];   // 每个副本中对象块的存储单元索引
    int obj_id = 0;
    int obj_size = 0;
    int obj_tag = 0;
    int last_request_point = 0; // 挂接未完成请求链头
    bool is_del = false;
    bool *block_read_status = nullptr;

    Object() {
        for (int i = 1; i <= REP_NUM; i++){
            unit[i] = new int[MAX_DISK_SIZE];
        }
    }
};

class Disk{
public:
    int id = 0;
    pair<int, int> item[MAX_DISK_SIZE];
    int p = 1;                        // 磁头的位置
    char last_action = '$';
    int last_token_cost = 0;
    int used_tokens = 0;
    int disk_size = 0;
    vector<pair<int, int>> done_request;
    vector<int> request;       // 这个磁盘中的请求

    vector<Block> disk_blocks;
    int block_group_num;
    void initBlock(int num, int v){
        block_group_num = num;
        disk_blocks.push_back(Block(0, 0));
        for (int i = 1; i <= block_group_num; i++){
            disk_blocks.push_back(Block(i, v));
        }
    }


    Disk(){
        memset(item, 0, sizeof(item));
    }



    int calculateReadToken(Disk &disk){
        if (disk.last_action != 'r'){
            return 64;
        }else{
            float token = disk.last_token_cost * 0.8f;
            token = ceil(token);
            return max(16, int(token));
        }
    }
};


class Request{
public:
    int req_id = 0;
    int obj_id = 0;
    int prev_id = 0;
    int arri_time = 0;
    bool is_done = false;
    float score = 0.0f;
    bool *block_read_status = nullptr;
};

请求价值计算

float get_score(int x){
    if (x <= 10){
        return -0.005 * x + 1.0;
    }else if(x <= 105){
        return -0.01 * x + 1.05;
    }else{
        return -1.0;
    }
}

时间同步

void handle_timestamp(){
    string t;
    cin >> t >> current_time;
    cout << "TIMESTAMP " << current_time << endl;
    fflush(stdout);
}

删除操作

void delete_action(){
    // 1 读取删除的个数
    int n_delete;
    cin >> n_delete;

    // 2 读取并记录所有删除的 对象id
    vector<int> deletes(n_delete);
    for (int i = 0; i < n_delete; i++)
        cin >> deletes[i];

    // 3 计算所有的终止 读请求 id
    vector<int> abort_reqs;
    for (int id : deletes){
        int curr_id = objects[id].last_request_point;
        while (curr_id != 0){
            if (!requests[curr_id].is_done){
                abort_reqs.push_back(curr_id);
                requests[curr_id].is_done = true;
            }
            curr_id = requests[curr_id].prev_id;
        }
    }

    // 4 输出终止的请求个数
    cout << int(abort_reqs.size()) << endl;

    // 5 输出所有的终止请求 id
    for (int req_id : abort_reqs){
        cout << req_id << endl;
    }

    // 6 执行删除操作
    for (int id : deletes){
        int curr_id = objects[id].last_request_point;
        while (curr_id != 0){
            if (!requests[curr_id].is_done){
                cout << curr_id << endl;
            }
            curr_id = requests[curr_id].prev_id;
        }
        for (int rep = 1; rep <= REP_NUM; rep++){
            int disk_id = objects[id].disk[rep];
            if (disk_id < 1 || disk_id > N)
                continue;
            do_object_delete(objects[id].unit[rep], disks[disk_id], objects[id].obj_size);
        }
        objects[id].is_del = true;
    }
    fflush(stdout);
}

完整思路

查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WEB安全-CTF中的PHP反序列化漏洞

什么是序列化&#xff1f; 简单来说序列化是将数组或对象转换成字符串的过程&#xff0c;这样的好处是利于对象存储与传输&#xff0c;在PHP中&#xff0c;序列化函数是serialize()&#xff0c;反序列化是unserialize() 无类序列化 无类序列化顾名思义就是不包含class的序列…

【论文阅读】Co2l: Contrastive continual learning

原文链接&#xff1a;[2106.14413] Co$^2$L: Contrastive Continual Learning 阅读本文前&#xff0c;需要对持续学习的基本概念以及面临的问题有大致了解&#xff0c;可参考综述&#xff1a; Wang L, Zhang X, Su H, et al. A comprehensive survey of continual learning: …

OpenMCU(五):STM32F103时钟树初始化分析

概述 本文主要描述了STM32F103初始化过程系统时钟的初始化,主要描述了系统时钟的初始化&#xff0c;AHB总线时钟&#xff0c;APB总线时钟等的初始化。 硬件板卡3d图 时钟树 STM32F103的时钟树&#xff0c;如下所示: 时钟源选择 从STM32F103的时钟树框图&#xff0c;我们可以…

ISIS报文

IS-IS 报文 目录 IS-IS 报文 一、报文类型与功能 二、报文结构解析 三、核心功能特性 四、典型应用场景 五、抓包数据分析 六、总结 IS-IS&#xff08;中间系统到中间系统&#xff09;协议报文是用于链路状态路由协议中网络设备间交换路由信息的关键载体&#xff0c;其设…

首屏加载时间优化解决

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff08;juejin/csdn同名&#xff09; &#xff0c;一位前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 高德AMap专栏 &#xff0c;记录一下平时学习在博客写作中记录&#xff0c;总结出的一些开发技巧✍。 感…

RabbitMQ--延迟队列事务消息分发

目录 1.延迟队列 1.1应用场景 1.2利用TTL死信队列模拟延迟队列存在的问题 1.3延迟队列插件 1.4常见面试题 2.事务 2.1配置事务管理器 3.消息分发 3.1概念 3.2应用场景 3.2.1限流 3.2.2负载均衡 1.延迟队列 延迟队列(Delayed Queue)&#xff0c;即消息被发送以后, 并…

Linux服务器组建与管理

#!/bin/bash #判断是否是root用户if [ "$USER" ! "root" ]; then echo "不是root用户&#xff0c;无法进行安装操作" exit 1 fi#关闭防火墙systemctl stop firewalld && systemctl disable firewalld && echo "防火墙已经关…

设计模式 Day 2:工厂方法模式(Factory Method Pattern)详解

继 Day 1 学习了单例模式之后&#xff0c;今天我们继续深入对象创建型设计模式——工厂方法模式&#xff08;Factory Method&#xff09;。工厂方法模式为对象创建提供了更大的灵活性和扩展性&#xff0c;是实际开发中使用频率极高的一种设计模式。 一方面&#xff0c;我们将简…

自动驾驶浪潮下,HMI 设计如何保障安全与便捷?

自动驾驶系统与 HMI 设计的关联性 自动驾驶系统涵盖了一系列复杂的传感器技术、算法以及执行机构。从激光雷达、摄像头等环境感知传感器&#xff0c;到用于处理海量数据的人工智能算法&#xff0c;再到控制车辆行驶的动力与转向执行系统&#xff0c;各部分协同工作&#xff0c…

瑞昱RTD2556QR显示器驱动芯片

一、概述 RTD2556QR芯片是由Realtek公司精心研发的一款高性能显示驱动芯片&#xff0c;专为满足现代显示设备对高分辨率、多功能接口及稳定性能的需求而设计。该芯片凭借其卓越的技术特性和广泛的应用领域&#xff0c;在显示驱动市场中占据重要地位。它集成了多种先进的功能模…

rustdesk 客户端使用

配置中继服务器 RustDesk 搭建-CSDN博客 配置客户端&#xff0c;服务端&#xff08;控制方&#xff0c;被控方&#xff09; 1.下载rustdesk.exe(windows为例) 2.完成后如下 3.配置

碳化硅 MOSFET三相逆变电路损耗新算法

基 于 碳 化 硅 MOSFET三相逆变电路损耗新算法 摘 要 提出了一种三相逆变电路功率开关器件损耗计算的新方法.为了达到将高频电力电子电路和实时仿真算 法 相 结 合 应 用 于 嵌 入 式 实 时 仿 真 平 台 的 目 的 &#xff0c;针 对 工 程 应 用 中 逆 变 器 损 耗 计 算 的 实…

增加等IO状态的唤醒堆栈打印及缺页异常导致iowait分析

一、背景 在之前的博客 在计算进程D状态持续时间及等IO的时间遇到的一处问题-CSDN博客 里&#xff0c;我们修复了一处在抓取D状态及等IO状态堆栈的监控程序的一处时间计算bug&#xff0c;在这篇博客里&#xff0c;我们进一步丰富监控程序&#xff0c;在进程iodelay被唤醒时&am…

新能源汽车空调系统(R134A)性能评估(一)

国内外主流空调系统厂家&#xff1a;贝尔、德尔福、空调国际、法雷奥、电装、松芝、杰信、新电、豫新等 泛亚汽车的空调电子部是比较优秀的整车空调研发团队。 空调系统综合试验台架是一套由试验室、风量测定装置、空气调和器、空气温度测定装置、湿度测定装置、加热器试验辅助…

Ubuntu 22.04安装MongoDB:GLM4模型对话数据收集与微调教程

在Ubuntu 22.04安装MongoDB Community Edition的教程请点击下方链接进行参考&#xff1a; 点击这里获取MongoDB Community Edition安装教程 今天将为大家带来如何微调GLM4模型并连接数据库进行对话的教程。快跟着小编一起试试吧~ 1. 大模型 ChatGLM4 微调步骤 1.1 从 github…

可编程增益放大器(PGA)在智能传感器自调节系统中的角色

在电子电路设计中&#xff0c;放大器芯片作为信号处理的核心器件&#xff0c;其性能直接影响系统整体表现。然而面对运算放大器、功率放大器、仪表放大器等众多类型&#xff0c;工程师常陷入选型困惑。作为国内领先的半导体解决方案提供商&#xff0c;华芯邦深耕放大器芯片领域…

微信登录、商品浏览前瞻

一.业务效果 二.所需技术

浙大研究团队揭示电场调控5-HT1AR的分子机制

本期介绍的文章题为 “Structural Insight into the Inactive/Active States of 5‑HT1AR and Molecular Mechanisms of Electric Fields in Modulating 5‑HT1AR” 。近期发表于JCIM。通过分子动力学模拟&#xff0c;探究 5-羟色胺 1A 受体(5-HT1AR) 在非活性 / 活性状态的构象…

视频AI赋能水利行业生态治理,水电站大坝漂浮物实时监测与智能预警方案

水电站大坝周边水域垃圾漂浮物不仅影响水质&#xff0c;还可能对大坝设施运行、水生态环境造成威胁。传统依靠人工巡检的方式效率低、存在监测盲区&#xff0c;难以实时全面地掌握漂浮物情况。借助EasyCVR视频汇聚平台与TSINGSEE青犀AI算法中台构建智能化监测方案&#xff0c;能…

flink 分组窗口聚合 与 窗口表值函数聚合 的区别

警告&#xff1a;分组窗口聚合已经过时。推荐使用更加强大和有效的窗口表值函数聚合。 参考官方文档 在 Apache Flink 中&#xff0c;分组窗口聚合&#xff08;Group Window Aggregation&#xff09; 和 窗口表值函数聚合&#xff08;Windowing TVF Aggregation&#xff09;…