题目大意
给定N天中每一天的骑行距离,如果有E天的骑行距离大于E,那么E就称之为艾丁顿数,请找出这个数字(尽可能大)
算法思路
既然要找到E的最大值,那么在每一天的骑行距离大于N的时候,E取得最大值N,这也是E的初始值。我们可以想到,(数组的下标值+1)其实就是第几天,那么将骑行的距离逆序排序,这样对于骑行距离大于(当前下标值+1)的位置,就是E的一个可能取值(E取下标值+1),我们为了取得最大值就是不断往右移动,知道第一次出现骑行距离小于等于当前下标值+1的位置,那么其左边就是E的最大值.
提交结果
AC代码
#include<cstdio>
#include<algorithm>
#include<unordered_set>
#include<vector>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main() {
int n;
scanf("%d",&n);
int num[n];
for(int i=0;i<n;++i){
scanf("%d",&num[i]);
}
sort(num,num+n,cmp);
int E = n;// 没有解的时候,E为n
for(int i=0;i<n;++i){
if(num[i]<=i+1){
E = i;
break;
}
}
printf("%d\n",E);
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。