rt,当看到ai<1e5的时候就觉得应该这么做,出考场一看取众数人都傻了
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,cnt;
long long ans;
int a[N],has[N],l[N],ack[N];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
has[a[i]]++;
}
for(int i=1;i<=N;i++)
if(has[i]!=0) l[++cnt]=has[i];
for(int i=1;i<=cnt;i++)
ack[i]=l[i];
for(int i=1;i<=cnt;i++){
for(int j=i+1;j<=cnt;j++){
if(ack[j]>=l[i]){
ack[j]-=l[i];
l[i]=0;
break;
}
else{
l[i]-=ack[j];
ack[j]=0;
}
}
}
for(int i=1;i<=cnt;i++)
ans+=l[i];
cout<<ans<<endl;
return 0;
}
顺便问下这个做法会不会被卡,目前民间和大样例都过了