1060. 爱丁顿数(25)
时间限制
250 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数”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
其实刚开始看到这题给我的感觉是难度怎么会有0.2???不应该很简单吗???但结果真的让人无奈,要考虑的太多了
接下来我就说几个样例
1
1
0(不是1)
5
10 9 8 7 6
5
5
10 9 8 7 5
4
4
5 5 5 5
4
6
5 5 5 5 5 5
4
代码如下
1 // 1060.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include<iostream> 6 #include<vector> 7 #include<algorithm> 8 9 using namespace std; 10 11 int main() 12 { 13 vector<int> v; 14 15 int N,num,j=0; 16 17 cin >> N; 18 19 for (int j = 0; j < N; j++) 20 { 21 cin >> num; 22 v.push_back(num); 23 } 24 25 vector<int>::reverse_iterator ri, rbegin = v.rbegin(), rend = v.rend(); 26 int size = v.size(); 27 28 sort(rbegin, rend);//对进入向量内的元素进行排序,大的在前面 29 30 if (v[0] == v[size - 1] && size > 1 && v[0] > 1)//处理全部相等且个数大于1和数值大于1 31 cout << v[0] - 1 << endl; 32 else if (v[0] == v[size - 1] && v[0] <= 1)//处理全为0或者全为1的情况 33 cout << 0 << endl; 34 else if (v[size - 1] > size)//所有的值都大于总天数 35 cout << size << endl; 36 else if (v[size - 1] == size)//最小数等于总天数 37 cout << size-1 << endl; 38 else//一般情况 39 { 40 for (j = 0; j<size; j++) 41 { 42 if (j + 1 > v[j] && v[j - 1] != v[j]) 43 break; 44 else 45 continue; 46 } 47 48 cout << v[j-1]-1 << endl; 49 50 } 51 52 return 0; 53 }