蒜头君的电脑里面有一些歌。现在他需要把这些歌装进一个硬盘里面。 硬盘大小有限,由于蒜头君下载的都是无损版本,每首歌的占用空间比较大,硬盘不一定装得下,然后他需要压缩其中的一部分歌曲这样他才能将尽可能多的歌曲装进他的硬盘里。 但是他想尽量压缩的歌曲数量尽量少,他不知道该怎么做,就来找你帮忙了。 输入格式 输入的第一行包含两个整数 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 11:01:16 浏览: 173
这是一个贪心的问题,我们首先将所有的歌曲按照压缩后的大小减去原本的大小从大到小排序,然后依次将每首歌曲尝试压缩,直到硬盘的空间被占满为止。如果所有的歌曲都被压缩了仍然无法占满硬盘,则输出 -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 为止,此时已经无法再加入新的文件,输出已经加入的文件数量即可。
用c++完成以下问题:蒜头君想泡咖啡喝。现在他得到了 n 份菜谱,每个菜谱上都给了两个数 l,r代表温度区间在 [l,r] 度泡出来的咖啡会很好喝。 可是菜谱太多了,蒜头君一度感到疑惑。经过思考之后他得出了一个结论:某个温度只要有 k 份或者更多菜谱推荐,那么这个温度下泡出来的咖啡会很好喝。 现在他给出了 m 个温度区间,同样还是用 [l,r] 表示,现在求问每个区间里面有多少个整数,使得咖啡在这个温度下泡出来会很好喝?
抱歉,我可以回答这个问题。下面是用C语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int main(){
int n, m, k;
scanf("%d%d%d", &n, &m, &k); //输入三个参数
int count[100001] = {0}; //用来记录每个温度出现的次数
for(int i=0; i<n; i++){
int l, r;
scanf("%d%d", &l, &r); //输入菜谱的温度区间
for(int j=l; j<=r; j++){
count[j]++; //将区间内每个温度出现的次数+1
}
}
for(int i=0; i<m; i++){
int ans = 0;
int l, r;
scanf("%d%d", &l, &r); //输入温度区间
for(int j=l; j<=r; j++){
if(count[j] >= k) ans++; //如果该温度出现次数不少于k,ans+1
}
printf("%d\n", ans); //输出该温度区间内使咖啡好喝的温度个数
}
return 0;
}
```
这段代码的思路是先用一个数组count来记录每个温度出现的次数,然后遍历每个温度区间,在区间内将对应的温度次数+1。最后对于每个给出的温度区间,遍历区间内的每个温度,如果出现次数不少于k,则将答案+1。最终输出每个区间内使咖啡好喝的温度个数。
阅读全文