列表

详情


NC230093. 你怎么敢走的啊

描述

集训队的成员们一直向往 101 实验室轻松愉快的氛围。以及弹性灵活的作息时间。

一天又要过去了,实验室里仍有 n 个同学在屏幕前 coding。由于担心停止 coding 回寝室会影响到其他同学,每个人都只会在实验室人足够少的时候离开。

一般地,对于第 i 个同学,ta 会且只会在实验室的人数不多于 a_i (包括 ta 自己)时离开。

然而可能有人留在 101 直面漫漫长夜。现在告诉你实验室的人数和序列 a,请算出实验室在一夜之后还有多少同学。

已经离开的同学会在寝室睡觉,不会返回实验室。

输入描述

本题有多组样例,第一行是样例个数 T。之后的每个样例中:

第一行是一个数 n,表示实验室一共有 n 个同学

第二行 n 个数,是序列 a,以空格分开

输出描述

输出一共 T 行,每行一个整数 r,代表有 r 个同学留在实验室没有走

示例1

输入:

1
5
1 2 4 2 5

输出:

3

说明:

第 5 个同学最先离开,接着是第 3 个,这时实验室里还有 3 个同学,所以第 1、2、4 个同学都不会离开。

示例2

输入:

1
6
4 4 3 1 2 5

输出:

6

说明:

没人敢走。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 250ms, 内存消耗: 804K, 提交时间: 2021-12-12 13:38:29

#include<bits/stdc++.h>
using namespace std;
int t,n,x[100100];
int main()
{
	cin>>t;
	while(t--)
	{
		memset(x,0,sizeof(x));
		cin>>n;
		for(int i=1;i<=n;i++) cin>>x[i];
		sort(x+1,x+n+1);
		bool t=1;int i=n;
		while(t&&i){
			if(x[i]>=i) i--;
			else t=0;
		}
		cout<<i<<endl;
	}
}

pypy3 解法, 执行用时: 467ms, 内存消耗: 40176K, 提交时间: 2021-12-12 15:44:19

n = int(input())
for i in range(n):
    m = int(input())
    l = list(map(int,input().split()))
    l.sort(reverse=True)
    for i in range(m):
        if l[i] >= m:
            m -= 1
    else:
        print(m)

Python3 解法, 执行用时: 592ms, 内存消耗: 22316K, 提交时间: 2021-11-09 16:47:46

for _ in range(int(input())):
    n = int(input())
    nums = [-1]+sorted(map(int, input().split()))
    for i in range(n, -1, -1):
        if nums[i] < i:
            print(i)
            break

上一题