1117 Eddington Number (25 分)
British astronomer Eddington liked to ride a bike. It is said that in order to show off his skill, he has even defined an “Eddington number”, E – that is, the maximum integer E such that it is for E days that one rides more than E miles. Eddington’s own E was 87.
Now given everyday’s distances that one rides for N days, you are supposed to find the corresponding E (≤N).
Input Specification
Each input file contains one test case. For each case, the first line gives a positive integer N (≤10 ^5), the days of continuous riding. Then N non-negative integers are given in the next line, being the riding distances of everyday.
Output Specification
For each case, print in a line the Eddington number for these N days.
Sample Input
10
6 7 6 9 3 10 8 2 7 8
Sample Output
6
题意
寻找Eddington数字:符合E天中骑行超过E公里条件最大的数。
注意第4个测试点:超过0公里的天数是n。
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int num[100001]; //超过i公里的天数
int main() {
int n,maxx=-1;
scanf("%d",&n);
vector<int> v(n+1);
for(int i=1; i<=n; i++) {
scanf("%d",&v[i]);
}
sort(v.begin()+1,v.end());
num[0]=n;
for(int i=1; i<=n; i++) {
int j=1;
while(v[j]<=i) j++;
num[i]=n+1-j;
}
for(int i=0; i<=n; i++) {
if(num[i]>=i) {
if(i>maxx) maxx=i;
}
}
printf("%d",maxx);
}