P7584
对于这样一个数列,我们可以先
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int maxn=3e5+10;
int a[maxn];
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,ans=0;
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
}
sort(a+1,a+1+n);
for(int i=1;i<=n;++i){
if(i==n){
++ans;
break;
}
if(a[i]+n>=a[n]+1){
++ans;
}
}
cout<<ans<<'\n';
return 0;
}
欢乐的爆零了。原来是因为如果出现有重复数据的情况下,
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int maxn=3e5+10;
int a[maxn];
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);//读入优化,速度媲美scanf
int n,ans=0;
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
}
sort(a+1,a+1+n);//从小到大一遍排序
int mx=INT_MIN/3;//初始化一个很小的数,/3防溢出(好习惯,在此无用)
for(int i=1;i<=n;++i){
mx=max(mx,a[i]+n-i+1);//尽可能使最大值最小
}
for(int i=1;i<=n;++i){
if(a[i]+n>=mx){
++ans;//超过最大值,累加
}
}
cout<<ans<<'\n';//完美输出!
return 0;
}