排队买汽水链接
描述
N个小朋友准备去买汽水 由于每个人的耐心值不一样,设为ai 代表第i个人只能忍受在他前面有ai个人 如果他去的时候,发现前面超过了ai个人 他就不买了。 小卖部的老板想要提前准备一定量的汽水,但是他不想浪费。排队的人的数量可能取决于她们到达的顺序。 帮助老板求出最少可能的排队的人数量
输入
第一行包含N,第二行包含N个用空格分隔的整数a1,a2…an 1≤N≤100000 0<=ai<=1e9
输出
输出在所有可能的人到达顺序之下,最小可能的人的数量
样例
输入
5
7 1 400 2 2
输出
3
提示
在这个情况下可能最后仅有三个人在队伍中(这也是最小可能值)。即耐心值为7的人和400先到并等在队伍中。然后耐心值为1的人到达并且会离开,这是由于已经有2个人在队伍中了。然后耐心值为2的两个人到达,一个人留下排队,一个人离开。
求最小值,将序排列,再做判断即可
完整代码如下
#include <bits/stdc++.h>
using namespace std;
int n,a[100010],ans;
bool cmp(int a,int b){return a>b;}
int main(){
cin>>n;
for(int i=1 ; i<=n ; i++)cin>>a[i];
sort(a+1,a+n+1,cmp);
for(int i=1 ; i<=n ; i++)if(a[i]>=i-1)ans++;
cout<<ans;
return 0;
}