A第四届南方科技大学程序设计竞赛同步赛--Ah, Tenshi

//题目来源于: 

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

目录

题目描述

输入描述:

输出描述:

翻译

想法 

 qsort函数

本题代码 


题目描述

Tenshi is a CS student in SUSTech with an initial coding level C(1≤C≤109)C(1\leq C\leq 10^9)C(1≤C≤109).

Tenshi meets N(1≤N≤106)N(1\leq N\leq 10^6)N(1≤N≤106) coders in the campus, the ithi^{th}ith of which has a coding level ai(1≤ai≤109)a_i(1\leq a_i\leq 10^9)ai​(1≤ai​≤109).

He can choose to challenge some or all of these NNN coders in any order he wants.

If his current coding level is greater than the coder he challenges, Tenshi's coding level will be increased by that coder's coding level.

Tenshi can challenge each coder at most once.

Tenshi would be grateful if you tell him the maximum coding level he can achieve.

输入描述:

The input consists of:

    One line containing two integers N,CN, CN,C seperated by a space.

    One line containing NNN integers a1,a2,…,aNa_1, a_2, \dots, a_Na1​,a2​,…,aN​ seperated by spaces.

输出描述:

Output a single integer indicating the maximum coding level Tenshi can achieve.

翻译

当然是网页自动翻译,虽然翻译的不准,但好歹可以看懂题目了。

想法 

因为是看心情挑战,如果想最高分就得从小到大去挑战,毕竟只能挑战一次。

所以想法是先排序,然后依次比较,如果打得过就提高水平,打不过就break;

在此介绍一下qsort函数用于快速排序;


 qsort函数

头文件stdlib.h

  void qsort(void* base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

参数:

1、 排序开始的地址吧,待排序数组,排好后还在这个数组里(不一定非要首元素)

2、 排序元素数量

3 、一个元素占用的空间大小(用sizeof)

4、 指向函数的指针,用于确定排序的顺序

(需要我们自定义一个比较函数,比如int cmp(const void *a, const void *b),可以看到参数是两个空指针,所以在cmp里重新定义两个指针来强制类型转换,当然也可以在返回值里强制转换);

// 返回值小于0,a会排在b前 由小到大 升序排序
int cmp(const void *a, const void *b)
{
	return *(int*)a-*(int*)b;
}
// 返回值大于0,a排在b之后 由大到小 降序排序
int cmp(const void *a, const void *b)
{
	return *(int*)b-*(int*)a;
}
//所以说这个函数告诉qsort如何排序

一个用qsort排序的栗子:

#include<stdio.h>
#include<stdlib.h>
int cmp1(const void *a,const void *b)
{
	int *aa=(int*)a;//强制类型转换
	int *bb=(int*)b;
	
	return *aa-*bb; 
}
int cmp2(const void *a,const void *b)
{
	return *(int *)b-*(int *)a; 
}
int main()
{
	int array[]={9,1,8,2,7,3,6,4,5};
	qsort(array,9,sizeof(array[0]),cmp1);
	for(int i=0;i<9;i++)
	printf("%d",array[i]);
	
	printf("\n");
	
	int brray[]={9,1,8,2,7,3,6,4,5};
	qsort(brray,9,sizeof(brray[0]),cmp2);
	for(int i=0;i<9;i++)
	printf("%d",brray[i]);
 } 

本题代码 

#include<stdio.h>
#define N 100000000
int cmp(const void*a,const void*b)
{
    return *(long long *)a-*(long long*)b;
}
int main()
{
	long long n,i = 0, j = 0;
	long long initial, t;
	long long a[N];
	scanf("%lld", &n);
	scanf("%lld", &initial);
	for (i = 0; i < n; i++)
		scanf("%lld", &a[i]);

	qsort(a,n,sizeof(long long),cmp);//升序排序

	for (i = 0; i < n; i++)
	{
		if (a[i] < initial)
			initial += a[i];
	}

	printf("%lld", initial);
}

其实一开始本vegetable是直接自己写了个排序,没有用函数qsort,数据小一点的结果还行,大了就是运行超时了;

感谢阅读!!!!阿里嘎多!!!

2021.12.27

SThree楠钰子.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序和三三总有一个能跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值