日度归档:2026年3月27日

排队

题目描述

某班有 n 个学生,编号 1n。中午下课后,学生们陆续赶到食堂吃饭。食堂只有一个打饭窗口,所以学生们要排队打饭。

小猴是负责维护秩序的志愿者,他需要组织这些学生排成一条队伍买饭就餐。第 i 位学生的耐心指数为 ai​,它的含义是:如果在 i 号之前,排队的人数超过了 ai​,他就会放弃排队;否则他就会留下。

请问小猴应该如何安排这些学生的排队次序,才能使得留下吃饭的人最多?

【输入格式】

第一行一个整数 n

第二行 nn 个整数 a1,a2,,an​。

【输出格式】

一行一个整数,表示留下吃饭的最大人数。

【输入输出样例#1】

输入#1

5
4 1 0 2 1

输出#1

4

【输入输出样例#2】

输入#2

7
2 2 6 5 4 0 6

输出#2

7

【输入输出样例#3】

输入#3

5
2 4 2 0 2

输出#3

4

【数据范围】

对于 100% 的数据:1n1060ain

【代码示例】

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5;
int n, p[MAXN];

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> p[i];
	}
	sort(p, p + n);
	int ans = 0;
	for (int i = 0; i < n; i++) {
		if (p[i] >= ans) {
			ans++;
			//cout << p[i] << ' ' << ans << endl;
		}
	}
	cout << ans << endl;

}