题目描述
知识点: 二分
思路: 简单二分,只是题目没看懂。说的是:找到最大的E天,使得这E天的骑行数都大于E公里
#include<iostream>
using namespace std;
const int N = 1e5+10;
int a[N];
int n;
bool check(int e){
int cnt = 0;
for(int i = 1;i <= n;i++){
if(a[i] > e) cnt++;
}
return cnt >= e;
}
int main(){
cin>>n;
for(int i = 1;i <= n;i++){
cin>>a[i];
}
int l = 1,r = n;
while(l < r){
int mid = (l + r + 1) >> 1;
if(check(mid)) l = mid;
else r = mid-1;
}
if(r == 1){
bool is_zero = true;
for(int i = 1;i <= n;i++)
if(a[i] > 1) is_zero = false;
if(is_zero){
cout<<"0";
return 0;
}
}
cout<<r;
return 0;
}