这个题用快排测试数据都不过,TLE,所以只能用sort排序(我也是醉了),排完序之后,定义s=0,让s与a[i]比较,如果s<=a[i],就让sum++,并且让s的值更新为s+a[i],同时利用循环,这是一个比较省时的很好的想法,比用两个for循环好,但是由于测试数据太大,两个for只会TLE(我用这个方法做了一遍,结果不是TLE,而是WA,妈呀!感觉做的挺对的,为什么WA呢,到底哪里错了,求抱大腿!
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n, a[100010];
scanf("%d", &n);
for(int i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
sort(a,a+n);
int sum=0, s=0;
for(int i=0; i<n; i++)
{
if(s<=a[i])
{
s=s+a[i];
sum++;
}
}
printf("%d\n", sum);
return 0;
}