输入的第一行包含两个整数 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 首歌曲原本的大小和被压缩后的大小(单位:字节)。
时间: 2024-02-16 20:01:23 浏览: 102
这是一个关于音乐文件压缩的问题,输入的第一行包含两个整数n和m,分别表示音乐文件的数量和磁盘可用空间。接下来的n行中,每行包含两个整数ai和bi,表示第i个音乐文件原本的大小和被压缩后的大小。
其中,ai>bi表示文件被压缩后大小变小,可以占用更少的空间。题目要求在给定的磁盘空间内,尽可能多地存储被压缩后的音乐文件,并输出可以存储的最大文件数量。
这是一个经典的贪心问题,可以按照文件压缩后大小的顺序进行排序,然后逐一加入可用空间内,直到无法再加入为止。具体的实现方式可以使用 C++ STL 中的 sort() 函数进行排序,然后用一个变量 sum 表示已经占用空间,逐一加入文件,并将 sum 的值累加,直到 sum 大于等于可用空间 m 为止,此时已经无法再加入新的文件,输出已经加入的文件数量即可。
相关问题
蒜头君的电脑里面有一些歌。现在他需要把这些歌装进一个硬盘里面。 硬盘大小有限,由于蒜头君下载的都是无损版本,每首歌的占用空间比较大,硬盘不一定装得下,然后他需要压缩其中的一部分歌曲这样他才能将尽可能多的歌曲装进他的硬盘里。 但是他想尽量压缩的歌曲数量尽量少,他不知道该怎么做,就来找你帮忙了。 输入格式 输入的第一行包含两个整数 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。
这是一个贪心的问题,我们首先将所有的歌曲按照压缩后的大小减去原本的大小从大到小排序,然后依次将每首歌曲尝试压缩,直到硬盘的空间被占满为止。如果所有的歌曲都被压缩了仍然无法占满硬盘,则输出 -1。
具体实现时,我们可以用一个变量 sum 记录当前压缩后的歌曲占用的空间,用一个变量 cnt 记录已经压缩的歌曲数量,然后按照上述方法依次遍历歌曲并进行压缩,直到 sum 超过了 m 或者所有歌曲都被压缩了为止。如果 sum 超过了 m,说明无法将所有的歌曲都装进硬盘,输出 -1,否则输出 cnt。
代码如下:
第一行包含一个整数 T (1≤T≤5),表示测试数据组数。 对于每组测试数据: 第一行包含一个整数 n (1≤n≤2⋅10 5 )。 第二行包含两个整数 L 1 , R 1 (1≤L 1 ≤R 1 ≤10 5 )。 第三行包含两个整数 L 2 , R 2 (1≤L 2 ≤R 2 ≤10 5 )。 输出描述: 对于每组测试数据,输出一个整数表示答案。
这是一个多组数据的输入输出问题。第一行输入 T,表示有 T 组数据。对于每组数据,第一行输入一个整数 n,接下来第二行和第三行分别输入两对整数 L1,R1 和 L2,R2。对于每组数据,输出一个整数表示答案。
阅读全文