原文链接:我的个人博客
原题链接
思路
对输入的里程数从大到小进行排序。题目要求找到最大的天数E,且E天的里程数均大于E。因此从大到小,去找最大的E.对照我的代码。v[i]即是当天的里程数,ans表示当前找到的E,如果v[i]>ans+1,那么答案天数就应该再加加,也就是ans++。
代码
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int main(){
int n;
cin>>n;
v.resize(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
sort(v.begin(),v.end(),greater<int>());
int ans = 0;
for(int i=0;i<n;i++){
if(v[i]>ans+1)ans++;
}
cout<<ans;
}