118. 华为OD-堆内存申请(100分)

难度 4
  • 标签:
  • 华为OD真题100分题型
题目描述
题解
题库

华为OD-堆内存申请(100分)

题目内容

有一个总空间为 100100 字节的堆,现要从中新申请一块内存,内存分配原则为:优先紧接着前一块已使用内存,分配空间足够且最接近申请大小的空闲内存。

输入描述

11 行是 11 个整数,表示期望申请的内存字节数

22 到第 NN 行是用空格分割的两个整数,表示当前已分配的内存的情况,每一行表示一块已分配的连续内存空间,每行的第 11 和第 22 个整数分别表示偏移地址和内存块大小,如:

00 11

33 22

表示 00 偏移地址开始的 11 个字节和 33 偏移地址开始的 22 个字节已被分配,其余内存空闲。

输出描述

若申请成功,输出申请到内存的偏移;

若申请失败,输出 1-1

备注

若输入信息不合法或无效,则申请失败

若没有足够的空间供分配,则申请失败

堆内存信息有区域重叠或有非法值等都是无效输入

样例1

输入

1
0 1
3 2

输出

1

说明

堆中已使用的两块内存是偏移从 00 开始的 11 个字节和偏移从 33 开始的 22 个字节,空闲的两块内存是偏移从 11 开始 22 个字节和偏移从 55 开始 9595 个字节,根据分配原则,新申请的内存应从 11 开始分配 11 个字节,所以输出偏移为 11