题目描述
近日病毒肆虐,X 社区医院想要给社区N位居民注射疫苗!所有N位居民(编号1...N)都自愿参加接种。但是一时间接种人数太多,大家需要排队。每个人的排队意愿是不一样的。居民 i 为了参与接种最多愿意排在 wi 个人后面。现在所有人都在社区,只要社区医院接种广播一发出,大家就都会赶去社区医院门口。人们会在开始接种前到达,但是没有两个人会在同一时间到达。此外,当居民 i 到达时,当且仅当至多有 wi 个人在排队时,他会来排队。
X医生想要提前准备一定量的疫苗,但是他不想浪费。排队的人数可能取决于人们到达的顺序。现在请你帮X医生求出可能排队的最少人数数量。
输入
第一行包含N,第二行包含N个用空格分隔的整数w1, w2, ..., wN. 输入保证1<=N<=10^5. 此外对于每个人i,0<=wi<=10^9.
输出
输出人们到达医院门口,可能排队的最少人数。
样例输入
5 7 1 400 2 2
样例输出
3
提示
样例解释:在这个情况下,可能最后仅有三个人在队伍中(这也是最小可能值)。假设w=7和w=400的人先到并等在队伍中。然后w=1的人到达并且会离开,这是由于已经有2个人在队伍中了。然后w=2的两个人到达,一个人留下排队,一个人离开。
题解:
#include<bits/stdc++.h>
using namespace std;
bool aa(int x,int y)
{
return x>y;
}
int main()
{
int a,s=0;
cin>>a;
int w[a];
for(int i=0;i<a;i++)cin>>w[i];
sort(w,w+a,aa);
for(int i=0;i<a;i++)
{
if(w[i]>=i)s++;
}
cout<<s;
return 0;
}