做法 只通过一例
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int num,t;
vector<int> v;
cin>>num;
for(int i=0;i<num;i++){
cin>>t;
v.push_back(t);
}
sort(v.begin(),v.end());
int len=v.size();
int max=-1;
for(int i=0;i<len-1;i++){
if(v[i]==v[i+1]) continue;
if((len-i-1)>max){
if(len-i-1==v[i]){
max=len-i-1;
}
}
else break;
}
cout<<max;
}
订正 柳婼.
选择天数迭代而非公里数,从a大到小排,i天数递增(a[p]>p)的最后一个值,(要求超过而非等于a[p])即为最大天数(这里有点糊涂)
#include <iostream>
#include <algorithm>
using namespace std;
int a[1000000];
bool cmp1(int a, int b) {
return a > b;
}
int main() {
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
sort(a+1, a+n+1, cmp1);
int ans = 0, p = 1;
while(ans <= n && a[p] > p) {
ans++;
p++;
}
printf("%d", ans);
return 0;
}