有n个人在排队。
对于每个人,我们都知道为他服务所需的时间ti。如果一个人等待的时间超过了为他服务所需的时间,他就会感到失望。一个人等待的时间是所有站在他前面的排队者被服务的总时间。xrf认为,如果我们把队列中的一些人调换一下,就可以减少失望的人的数量。
帮助xrf找出通过交换队列中的人可以达到的最大不失望人数是多少。
我们分析题意:
我们要尽量要不失望的人越少,所以我们这道题的贪心思维是先将每个人的处理时间按从小到大排序,然后从小开始累加等待时间,一直向后遍历,如果我们遇到了当前人的等待时间小于前面的累加等待时间说明,当前这个人不耐烦了,这个人就会离开,我们直接跳过这个人,直到遍历结束,我们输出不失望的人数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num;cin>>num;
int nums[num];
for(int i=0;i<num;i++)
{
cin>>nums[i];
}
sort(nums,nums+num);
int waittime=nums[0];
int sum=1;
for(int i=1;i<num;i++)
{
if(waittime<=nums[i])
{
sum++;
waittime+=nums[i];
}
}
cout<<sum;
}