NC230093. 你怎么敢走的啊
描述
输入描述
本题有多组样例,第一行是样例个数 。之后的每个样例中:
第一行是一个数 ,表示实验室一共有 个同学
第二行 个数,是序列 ,以空格分开
输出描述
输出一共 行,每行一个整数 ,代表有 个同学留在实验室没有走
示例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