蒜头君的电脑里面有一些歌。现在他需要把这些歌装进一个硬盘里面。 硬盘大小有限,由于蒜头君下载的都是无损版本,每首歌的占用空间比较大,硬盘不一定装得下,然后他需要压缩其中的一部分歌曲这样他才能将尽可能多的歌曲装进他的硬盘里。 但是他想尽量压缩的歌曲数量尽量少,他不知道该怎么做,就来找你帮忙了。 输入格式 输入的第一行包含两个整数 nn 和 mm(1\le n\le 10^{5}1≤n≤10 5 ,1\le m\le 10^{9}1≤m≤10 9 ),分别表示蒜头君电脑里面歌曲的个数和他的硬盘大小(单位:字节)。 然后输入nn 行,每一行两个整数 a_ia i ​ 和 b_ib i ​ (1\le b_i\lt a_i\le10^{9}1≤b i ​ <a i ​ ≤10 9 ),分别表示第 ii 首歌曲原本的大小和被压缩后的大小(单位:字节)。 输出格式 输出只有一个整数,蒜头君至少需要压缩的歌曲的数量。 如果所有的歌曲都压缩的硬盘还是装不下,输出 -1−1。

时间: 2024-02-16 21:01:16 浏览: 20
这是一个贪心的问题,我们首先将所有的歌曲按照压缩后的大小减去原本的大小从大到小排序,然后依次将每首歌曲尝试压缩,直到硬盘的空间被占满为止。如果所有的歌曲都被压缩了仍然无法占满硬盘,则输出 -1。 具体实现时,我们可以用一个变量 sum 记录当前压缩后的歌曲占用的空间,用一个变量 cnt 记录已经压缩的歌曲数量,然后按照上述方法依次遍历歌曲并进行压缩,直到 sum 超过了 m 或者所有歌曲都被压缩了为止。如果 sum 超过了 m,说明无法将所有的歌曲都装进硬盘,输出 -1,否则输出 cnt。 代码如下:
相关问题

输入的第一行包含两个整数 nn 和 mm(1\le n\le 10^{5}1≤n≤10 5 ,1\le m\le 10^{9}1≤m≤10 9 ),分别表示蒜头君电脑里面歌曲的个数和他的硬盘大小(单位:字节)。 然后输入nn 行,每一行两个整数 a_ia i ​ 和 b_ib i ​ (1\le b_i\lt a_i\le10^{9}1≤b i ​ <a i ​ ≤10 9 ),分别表示第 ii 首歌曲原本的大小和被压缩后的大小(单位:字节)。

这是一个关于音乐文件压缩的问题,输入的第一行包含两个整数n和m,分别表示音乐文件的数量和磁盘可用空间。接下来的n行中,每行包含两个整数ai和bi,表示第i个音乐文件原本的大小和被压缩后的大小。 其中,ai>bi表示文件被压缩后大小变小,可以占用更少的空间。题目要求在给定的磁盘空间内,尽可能多地存储被压缩后的音乐文件,并输出可以存储的最大文件数量。 这是一个经典的贪心问题,可以按照文件压缩后大小的顺序进行排序,然后逐一加入可用空间内,直到无法再加入为止。具体的实现方式可以使用 C++ STL 中的 sort() 函数进行排序,然后用一个变量 sum 表示已经占用空间,逐一加入文件,并将 sum 的值累加,直到 sum 大于等于可用空间 m 为止,此时已经无法再加入新的文件,输出已经加入的文件数量即可。

蒜头君二分查找(四)

蒜头君的二分查找(四)问题是关于在一个长度为n的数组A中,找出等于x的数字的个数。下面是一个使用二分查找算法解决这个问题的示例代码: ```python def binary_search(nums, target): left = 0 right = len(nums) - 1 lower = -1 upper = -1 # 寻找左边界 while left <= right: mid = (left + right) // 2 if nums[mid] >= target: right = mid - 1 else: left = mid + 1 if nums[mid] == target: lower = mid # 寻找右边界 left = 0 right = len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] <= target: left = mid + 1 else: right = mid - 1 if nums[mid] == target: upper = mid if lower == -1 or upper == -1: return 0 else: return upper - lower + 1 # 示例输入 n = 6 A = [1, 2, 2, 3, 3, 3] x = 2 # 调用二分查找函数 count = binary_search(A, x) print("在数组A中,等于x的数字有", count, "个") ``` 这段代码首先定义了一个`binary_search`函数,该函数接受一个已排序的数组`nums`和目标值`target`作为参数。函数中使用两次二分查找来找到目标值的左边界和右边界,然后计算出等于目标值的数字个数。最后,我们可以通过调用`binary_search`函数来解决蒜头君的问题。

相关推荐

最新推荐

recommend-type

单片机C语言Proteus仿真实例可演奏的电子琴

单片机C语言Proteus仿真实例可演奏的电子琴提取方式是百度网盘分享地址
recommend-type

电力概预算软件.zip

电力概预算软件
recommend-type

setuptools-64.0.0.tar.gz

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

爱你老妈(HTML文件)母亲节快乐

母亲节祝福html源码 很简单的代码,随机生成背景
recommend-type

Python源码-三门问题的验证.py

Python源码-三门问题的验证
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用matlab绘制高斯色噪声情况下的频率估计CRLB,其中w(n)是零均值高斯色噪声,w(n)=0.8*w(n-1)+e(n),e(n)服从零均值方差为se的高斯分布

以下是用matlab绘制高斯色噪声情况下频率估计CRLB的代码: ```matlab % 参数设置 N = 100; % 信号长度 se = 0.5; % 噪声方差 w = zeros(N,1); % 高斯色噪声 w(1) = randn(1)*sqrt(se); for n = 2:N w(n) = 0.8*w(n-1) + randn(1)*sqrt(se); end % 计算频率估计CRLB fs = 1; % 采样频率 df = 0.01; % 频率分辨率 f = 0:df:fs/2; % 频率范围 M = length(f); CRLB = zeros(M,1); for
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。