PAT 1117 Eddington Number

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 Ewas 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

這道題沒有設置過多砍,線性搜索和二分搜索都能通過測試。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//返回大於val的起始位置
int find(vector<int>& vector1,int val){
    int beg=0,end=vector1.size()-1;
    while (beg<=end){
        int mid=(beg+end)/2;
        if(vector1[mid]<=val){
            beg=mid+1;
        } else{
            end=mid-1;
        }
    }
    while (vector1[end]<=val){
        end++;
    }
    return end;
}
int count(vector<int>& vector1,int e){
    int cnt=0;
    for (int i : vector1) {
        if(i>e){
            cnt++;
        }
    }
    return cnt;
}
bool judge(int e,vector<int>& vector1){
  //  int cnt=count(vector1,e);
    int cnt=vector1.size()-find(vector1,e);
    return cnt>=e;
}

int main() {
    int N;
    cin>>N;
    vector<int> vector1;
    for (int i = 0; i < N; ++i) {
        int val;
        cin>>val;
        vector1.push_back(val);
    }
    sort(vector1.begin(),vector1.end());
    for (int j = N; j >=0 ; --j) {
        if(judge(j,vector1)){
            cout<<j<<endl;
            return 0;
        }
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章