英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” E ,即满足有 E 天骑车超过 E 英里的最大整数 E。据说爱丁顿自己的 E 等于87。
现给定某人 N 天的骑车距离,请你算出对应的爱丁顿数 E(≤N)。
输入格式:
输入第一行给出一个正整数 N (≤105),即连续骑车的天数;第二行给出 N 个非负整数,代表每天的骑车距离。
输出格式:
在一行中给出 N 天的爱丁顿数。
输入样例:
10
6 7 6 9 3 10 8 2 7 8
输出样例:
6
【解读】
这题描述的很不清楚,“有 E 天骑车超过 E 英里的最大整数 E”指的是“至少有 E 天骑车超过 E 英里的最大整数 E”,>=即可,不一定刚好相等。另外我采取的算法应该是效率最高算法之一,不需要排序。
#include <iostream>
#include <cstring>
using namespace std;
const int MAX = 1000001;
int main()
{
int n;
cin >> n;
int i = 0;
int* arr = new int[MAX];
for(i = 0;i <= n;i++)
{
arr[i] = 0;
}
int tmp = 0;
int max = 0;
for (i = 0; i < n; i++)
{
cin >> tmp;
if (tmp > max)
max = tmp;
arr[tmp]++; //计数
}
int bigger = 0;
for (i = max; i >= 0; i--)
{
if (bigger >= i)
{
break;
}
bigger += arr[i];
}
cout << i;
delete[] arr;
return 0;
}