[福建师大附中OJ 2514]接种疫苗

 

题目描述

近日病毒肆虐,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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值