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

C++刷题篇——05静态扫描

一、题目

二、解题思路

注意:注意理解题目,缓存的前提是先扫描一次

1、使用两个map,两个map的key相同,map1:key为文件标识,value为文件出现的次数;map2:key为文件标识,value为扫描成本

2、使用循环,求每一类文件的两种方式最优解:

min(文件出现的次数 * 文件标识在file_cost中对应的value即扫描成本, 文件标识在file_cost中对应的value即扫描成本 + 缓存价格)

三、代码

#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>using namespace std;vector<int>split(string params) {vector<int>p;while (params.find(" ") != string::npos) {int found = params.find(" ");p.push_back(stoi(params.substr(0, found)));params = params.substr(found + 1);}p.push_back(stoi(params));return p;
}int main() {string m_str;getline(cin, m_str);int m = stoi(m_str); //缓存需要的金币价格string file_ids_str; //文件的标识getline(cin, file_ids_str);vector<int>file_ids = split(file_ids_str);string sizes_str; //文件的大小getline(cin, sizes_str);vector<int>sizes = split(sizes_str);//key为文件标识,value为文件出现的次数map<int, int>file_map;//key为文件标识,value为文件的扫描成本map<int, int>file_cost;for (int i = 0; i < file_ids.size(); i++) {if (file_map.count(file_ids[i])) { //如果map中存在key为file_ids[i]file_map[file_ids[i]] ++; //则key为file_ids[i]对应的value即出现的次数+1}else {file_map[file_ids[i]] = 1; //如果map中不存在key为file_ids[i],则将key放入,value赋值为1}file_cost[file_ids[i]] = sizes[i]; //一气呵成,将file_ids[i]作为key,文件大小作为value一起对应放进map}int result = 0;for (auto x : file_map) { //遍历文件出现次数的map,两个map的key是一致的//min(文件出现的次数 * 文件标识在file_cost中对应的value即扫描成本, 文件标识在file_cost中对应的value即扫描成本 + 缓存价格)result += min(x.second * file_cost[x.first], file_cost[x.first] + m);}cout << result << endl;return 0;
}

相关文章:

  • CTF wed安全(攻防世界)练习题
  • 外包干了4年,技术退步明显。。。。
  • Oracle利用BBED恢复崩溃实例(ORA-01092,ORA-00704,ORA-01578)
  • java汇总区间
  • 关于网络丢包的一种可能性分析
  • YOLOv9改进策略 :主干优化 | 极简的神经网络VanillaBlock 实现涨点 |华为诺亚 VanillaNet
  • 机器人规划算法——基于A-star和CostMap膨胀地图的全局规划(附Github源码链接)
  • Mysql-数据库范式和Mysql安装
  • MCU友好过渡MPU,米尔基于STM32MP135开发板裸机开发应用笔记
  • HANA中的内存及磁盘使用统计
  • 美国CPC认证如何办理?CPC审核不通过有哪些原因呢?
  • ArcGIS Pro横向水平图例
  • Android开发 OCR:通过Tesseract实现图片文字识别
  • 题目:新一的宝藏搜寻加强版(蓝桥OJ 4059)
  • 学习笔记——C语言基本概念指针(下)——(8)
  • ----------
  • @angular/forms 源码解析之双向绑定
  • [deviceone开发]-do_Webview的基本示例
  • 《Java编程思想》读书笔记-对象导论
  • 【comparator, comparable】小总结
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Flex布局到底解决了什么问题
  • HTTP中GET与POST的区别 99%的错误认识
  • Javascript弹出层-初探
  • k8s 面向应用开发者的基础命令
  • linux安装openssl、swoole等扩展的具体步骤
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MD5加密原理解析及OC版原理实现
  • mockjs让前端开发独立于后端
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python连接Oracle
  • Spring Cloud中负载均衡器概览
  • SQLServer之索引简介
  • Vim Clutch | 面向脚踏板编程……
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 给github项目添加CI badge
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 在electron中实现跨域请求,无需更改服务器端设置
  • Nginx实现动静分离
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (JS基础)String 类型
  • (vue)页面文件上传获取:action地址
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三)c52学习之旅-点亮LED灯
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)SpringBoot3---尚硅谷总结
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET单元测试
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET使用存储过程实现对数据库的增删改查