牛客 小白月赛 24 做题

题目

链接:https://ac.nowcoder.com/acm/contest/5158/G
来源:牛客网

众所周知,牛可乐最喜欢说的一句话是

你有这时间,是不是可以多做两个题?

然后大家开始了愉快的做题之旅。

有 nn 个题目,mm 分钟,做完每个题目所花费的时间是不一样的,求牛可乐最多可以做出多少个题目。

输入描述:
第一行是空格分隔的两个整数 n,mn,m,表示有 nn 个题目和 mm 分钟。

第二行有 nn 个非负整数 a1,a2,a3,…,ana1,a2,a3,…,an,表示牛可乐 做出第 ii 个题目所需要的时间

输出描述:
输出一行一个整数表示牛可乐能做出的最多的题目数量

示例1
输入
复制
5 2
2 3 0 1 1
输出
复制
3
备注:
建议使用 scanf 读入

≤1e5
建议使用 scanf 读入

题目感悟

这题其实是签到题的难度,但做下来,我还是学到了很多知识点。
比如,C++函数库中有sort这个函数,可以直接进行排序,免去了排序算法的很多麻烦。
再比如,题目中建议我使用scanf进行输入,我特意换用cin和scanf,进行了两次提交,发现cin比scanf耗时很多,同一种算法,cin总耗时241ms,scanf总耗时80ms

sort函数的用法

(1)sort函数包含在algorithm之中

(2)sort函数是对一段连续的存贮单元的数据进行排序的函数,其排序的元素可以是数值,也可以是一组数据(结构体),其算法比普通的冒泡排序法,选择排序法,希尔排序要简便很多,可以很大程度上减少算法的复杂程度

(3)sort函数有三个参数:

1.第一个是要排序的数组的起始地址。

2.第二个是结束的地址(最后一位要排序的地址)

3.第三个参数是排序的方法,可以是从大到小也可是从小到大。
如果不写第三个参数,则默认的排序方法是从小到大排序。

4.升序:sort(begin,end,less<数据类型>());
降序:sort(begin,end,greater<数据类型>());

例:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[5]={4,8,3,0,5};
	sort(a,a+5,less<int>());//升序排序
	for(int i=0;i<5;i++){
		printf("%d ",a[i]); 
	}
	return 0;
 } 
0 3 4 5 8//输出
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[5]={4,8,3,0,5};
	sort(a,a+5,greater<int>());
	for(int i=0;i<5;i++){
		printf("%d ",a[i]); 
	}
	return 0;
 } 
8 5 4 3 0//降序

本题代码

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
typedef long long ll;
ll a[N];
int main(){
	ll n,m,i,result,sum=0;
	cin>>n>>m; 
	for(i=0;i<n;i++){
		scanf("%lld",&a[i]);
	}
	sort(a,a+n);
	for(i=0;i<n;i++){
		sum=sum+a[i];
		if(sum>m){
			result=i;
			break;
		}
		if(sum==m){
			result=i+1;
			break;
		}
	}
	cout<<result<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值