CF545D Queue|贪心

题目描述

Little girl Susie went shopping with her mom and she wondered how to improve service quality.

There are nn people in the queue. For each person we know time t_{i}ti​ needed to serve him. A person will be disappointed if the time he waits is more than the time needed to serve him. The time a person waits is the total time when all the people who stand in the queue in front of him are served. Susie thought that if we swap some people in the queue, then we can decrease the number of people who are disappointed.

Help Susie find out what is the maximum number of not disappointed people can be achieved by swapping people in the queue.

输入格式

The first line contains integer nn ( 1<=n<=10^{5}1<=n<=105 ).

The next line contains nn integers t_{i}ti​ ( 1<=t_{i}<=10^{9}1<=ti​<=109 ), separated by spaces.

输出格式

Print a single number — the maximum number of not disappointed people in the queue.

题意翻译

有一个有n个人的队伍,其中第i个人需要t[i]分钟来服务,期间后面的人就要等着。如果一个人等待的时间大于了他被服务的时间,他就会失望。你的任务是重排队伍,使失望的人尽量的少,并只需输出不失望的人的数量的最大值

输入输出样例

输入 #1

5
15 2 1 5 3

输出 #1

4

说明/提示

Value 44 is achieved at such an arrangement, for example: 1,2,3,5,151,2,3,5,15 . Thus, you can make everything feel not disappointed except for the person with time 5.

 

解题思路:按照从花费的时间从小到大排序,然后挨个判断和否合法。如果合法就加进去,不合法就放到后面。

代码如下:


#include
#include
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
ll a[maxn];
bool cmp(int a,int b){
    return a>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1,cmp);
    ll ans=0,sum=0;
    for(int i=1;i<=n;i++){
        if(sum<=a[i]){
            ans++;
            sum+=a[i];
        }
    }
    cout<

 

你可能感兴趣的:(贪心)