//题目来源于:
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
目录
题目描述
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楠钰子.