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<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
ll a[maxn];
bool cmp(int a,int b){
    return a<b;
}
int main(){
    int n;
    cin>>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<<ans<<endl;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章