参考了一下柳神代码,但感觉不太好理解,自己换了另一种方法编写了程序,本质是和柳神一样。
数组b下标从1开始计算,b[i]代表有i天超过了a[i-1]-1,数组a存的是降序后的数据(下标从0开始),
10
6 7 6 9 3 10 8 2 7 8
对于样例来说,b[1]=9 有一天超过了九公里 b[2]=8,有两天超过了8公里
b[3]=7,b[4]=7,b[5]=6,b[6]=6,符合题意可以输出6
假设如果有b[7]=6,依旧是输出6,所以循环条件为下标大于等于就可以输出结果,结果为数组值
但是循环结束后,没有满足条件的情况,比如5(7,7,7,7,7),应该输出5,所以在最后添加输出,不加的话过不了测试点3
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<bits/stdc++.h>
#include<string.h>
#include<vector>
using namespace std;
bool cmp(int n,int m){
return n>m;
}
int main(void){
int n;
cin>>n;
int a[n];
int b[n+1];
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n,cmp);
for(int i=1;i<=n;i++)
b[i]=a[i-1]-1;
int i;
for(i=1;i<n;i++){
if(i>=b[i]){
cout<<b[i]<<endl;
return 0;}
}
cout<<i<<endl;
}