【编程题目 |100分】内存资源分配华为OD机试   2024 Q4考试题 E卷】


相似题目:华为机试内存资源分配-大厂笔经 (online1987.com)


时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld


本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,

编码后请点击”保存并调试“按钮进行代码提交。


题目描述

内存资源分配

有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源,用户会进行一系列内存申请,需要按需分配内存池中的资源返回申请结果成功失败列表。

分配规则如下:

  1. 分配的内存要大于等于内存的申请量,存在满足需求的内存就必须分配,优先分配粒度小的,但内存不能拆分使用;
  2. 需要按申请顺序分配,先申请的先分配,有可用内存分配则申请结果为true;
  3. 没有可用则返回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++解法一


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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, ',');
#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, ',');
#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%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

C++解法二


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<bits/stdc++.h>
using namespace std;
#include<bits/stdc++.h> using namespace std;
#include<bits/stdc++.h>

using namespace std;

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JAVA解法一


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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<>();
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<>();
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%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JAVA解法二


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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(",");
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(",");
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%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Python解法一


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import collections
if __name__ == "__main__":
s = input().split(',')
re = list(map(int, input().split(',')))
import collections if __name__ == "__main__": s = input().split(',') re = list(map(int, input().split(',')))
import collections

if __name__ == "__main__":
    s = input().split(',')
    re = list(map(int, input().split(',')))

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Python解法二


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
S1 = "64:2,128:1,32:4,1:128"
S2 = "50,36,64,128,127"
import re
Dicts = dict()
for x in S1.split(","):
S1 = "64:2,128:1,32:4,1:128" S2 = "50,36,64,128,127" import re Dicts = dict() for x in S1.split(","):
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%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看