我至今不会这道题,觉得比 20 年贪吃蛇都困难,这合理吗。
下面是我的 75 分代码。出考场看不懂了。
#include<bits/stdc++.h>
using namespace std;
int n, a[100005], buk[1000005], mx = 0, mn = INT_MAX, cnt = 0, js = 0, ans = 0;
int main(){
// freopen("duel.in", "r", stdin);
// freopen("duel.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++){
scanf("%d", &a[i]);
buk[a[i]]++;
mx = max(mx, a[i]);
mn = min(mn, a[i]);
}
if (buk[mn] == n){
cout << n;
return 0;
}
cnt += buk[mn];
js += buk[mn];
if (n - cnt <= buk[mn]){
cout << cnt;
return 0;
}
ans += buk[mn];
for (int i = mn + 1; i <= mx; i++){
if (!buk[i])
continue;
js += buk[i];
if (min(n - cnt, n - js) <= buk[i]){
// cout << i << " " << cnt << " " << js << "\n";
ans = ans + min(n - cnt, n - js);
break;
}
ans += buk[i];
cnt = js + buk[i];
}
printf("%d", n - ans);
return 0;
}