#include <bits/stdc++.h> #define ft first #define sc second #define pb push_back #define FOR(i,n) for(int i=0; i<n; i++) #define FORX(i,a,b) for(int i=(a); i<=(b); i++) #define watch(x) cerr << (#x) << " == " << (x) << endl typedef long long ll; typedef long double ld; using namespace std; int counter[500'005]; int sorted[500'005]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; FOR(i,n){ int x; cin>>x; counter[x]++; } FORX(i,1,n){ sorted[counter[i]]++; } int max_total = 0, cnt = 0; for (int i = n; i >= 1; i--){ while (sorted[i]){ if (max_total >= n) {break;} max_total += 2*i-1; cnt++; sorted[i]--; } } cout<<cnt<<"\n"; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <bits/stdc++.h> #define ft first #define sc second #define pb push_back #define FOR(i,n) for(int i=0; i<n; i++) #define FORX(i,a,b) for(int i=(a); i<=(b); i++) #define watch(x) cerr << (#x) << " == " << (x) << endl typedef long long ll; typedef long double ld; using namespace std; int counter[500'005]; int sorted[500'005]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; FOR(i,n){ int x; cin>>x; counter[x]++; } FORX(i,1,n){ sorted[counter[i]]++; } int max_total = 0, cnt = 0; for (int i = n; i >= 1; i--){ while (sorted[i]){ if (max_total >= n) {break;} max_total += 2*i-1; cnt++; sorted[i]--; } } cout<<cnt<<"\n"; return 0; } |