#include <bits/stdc++.h> using namespace std; void bsort(vector<int>& vec) { vector<int> count(vec.size(), 0); for (auto x : vec) ++count[x]; int j = 0; for (int i = 0; i < static_cast<int>(count.size()); ++i) { while (count[i] > 0) { vec[j++] = i; --count[i]; } } } int main() { std::ios::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; vector<int> freq(n + 1, 0); for (int i = 0; i < n; ++i) { int a; cin >> a; ++freq[a]; } bsort(freq); int i = 0; while (i <= n && freq[i] == 0) ++i; int j = n; int ans = 0; while (i < j) { if (freq[j] > freq[i]) { freq[j] -= freq[i]; freq[i] = 0; ++i; } else if (freq[j] <= freq[i]) { freq[i] -= freq[j] - 1; freq[j] = 1; --j; ++ans; } } if (freq[j] > 0) ++ans; cout << ans << "\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 47 48 49 50 | #include <bits/stdc++.h> using namespace std; void bsort(vector<int>& vec) { vector<int> count(vec.size(), 0); for (auto x : vec) ++count[x]; int j = 0; for (int i = 0; i < static_cast<int>(count.size()); ++i) { while (count[i] > 0) { vec[j++] = i; --count[i]; } } } int main() { std::ios::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; vector<int> freq(n + 1, 0); for (int i = 0; i < n; ++i) { int a; cin >> a; ++freq[a]; } bsort(freq); int i = 0; while (i <= n && freq[i] == 0) ++i; int j = n; int ans = 0; while (i < j) { if (freq[j] > freq[i]) { freq[j] -= freq[i]; freq[i] = 0; ++i; } else if (freq[j] <= freq[i]) { freq[i] -= freq[j] - 1; freq[j] = 1; --j; ++ans; } } if (freq[j] > 0) ++ans; cout << ans << "\n"; return 0; } |