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

一、题目

二、解题思路

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

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

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

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

三、代码

cpp 复制代码
#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;
}
相关推荐
有一个好名字10 分钟前
工具即双手 —— 从 Bash 到 Tool Dispatch Map
开发语言·chrome·bash
Lyyaoo.11 分钟前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-194311 分钟前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
智者知已应修善业22 分钟前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
DevilSeagull1 小时前
MySQL(2) 客户端工具和建库
开发语言·数据库·后端·mysql·服务
MATLAB代码顾问1 小时前
改进遗传算法(IGA)求解作业车间调度问题(JSSP)——附MATLAB代码
开发语言·matlab
AI进化营-智能译站1 小时前
ROS2 C++开发系列16-智能指针管理传感器句柄|告别ROS2节点内存泄漏与野指针
java·c++·算法·ai
报错小能手1 小时前
好好讲讲移动构造 移动赋值
c++
syker1 小时前
AIFerric深度学习框架:自研全栈AI基础设施的技术全景
开发语言·c++
HSunR2 小时前
dify 搭建ai作业批改流
开发语言·前端·javascript