【编程题目 |100分】内存资源分配【华为OD机试 2024 Q4考试题 E卷】
相似题目:华为机试内存资源分配-大厂笔经 (online1987.com)
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,
编码后请点击”保存并调试“按钮进行代码提交。
■ 题目描述
【内存资源分配】
有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源,用户会进行一系列内存申请,需要按需分配内存池中的资源返回申请结果成功失败列表。
分配规则如下:
- 分配的内存要大于等于内存的申请量,存在满足需求的内存就必须分配,优先分配粒度小的,但内存不能拆分使用;
- 需要按申请顺序分配,先申请的先分配,有可用内存分配则申请结果为true;
- 没有可用则返回false。
注意:不考虑内存释放
输入描述
输入为两行字符串
第一行为内存池资源列表
包含内存粒度数据信息,粒度数据间用逗号分割
一个粒度信息内用冒号分割
冒号前为内存粒度大小,冒号后为数量
资源列表不大于1024
每个粒度的数量不大于4096
第二行为申请列表
申请的内存大小间用逗号分割,申请列表不大于100000
如
64:2,128:1,32:4,1:128
50,36,64,128,127
输出描述
输出为内存池分配结果
如true,true,true,false,false
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
64:2,128:1,32:4,1:128
50,36,64,128,127
输出
true,true,true,false,false
代码实现
C++解法一
#include<bits/stdc++.h> using namespace std; #define LOWBOUND 1 << 10 #define UPBOUND 1e5 #define IOS \ cin.sync_with_stdio(false); \ cin.tie(nullptr); \ cout.tie(nullptr); #define SZ(x) ((int) (x).size()) class Solution { public: // 待实现函数,在此函数中填入答题代码; string memoryResourceAllocate(string memoryPoolInfo, string applications) { vector <string> memorys; vector<int> apps; SplitString(memoryPoolInfo, memorys, ","); SplitInt(applications, apps, ',');
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看C++解法二
#include<bits/stdc++.h> using namespace std;
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看JAVA解法一
import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.TreeMap; public class MemoryAllocation { public static void main(String[] args) { Scanner in = new Scanner(System.in); TreeMap<Integer, Integer> pool = new TreeMap<>();
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看JAVA解法二
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] input = sc.nextLine().split(","); String[] apply = sc.nextLine().split(",");
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看Python解法一
import collections if __name__ == "__main__": s = input().split(',') re = list(map(int, input().split(',')))
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看Python解法二
S1 = "64:2,128:1,32:4,1:128" S2 = "50,36,64,128,127" import re Dicts = dict() for x in S1.split(","):
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看