#include <bits/stdc++.h> constexpr int MAXN = 500001; using namespace std; void solve() { int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a.begin(), a.end()); int prev = a[0]; int cnt = 0; vector<int> cnts; for (int v : a) { if (v == prev) { cnt++; } else { cnts.push_back(cnt); cnt = 1; prev = v; } } cnts.push_back(cnt); sort(cnts.begin(), cnts.end()); int res = 0; int j = size(cnts) - 1; int i = 0; while (i <= j) { if (!cnts[j]) break; res++; int rem = cnts[j] - 1; while (i < j && rem) { int diff = min(rem, cnts[i]); if (diff) { rem -= diff; cnts[i] -= diff; } if (!cnts[i]) i++; } j--; } cout << res << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); // #ifdef LOCAL // int t; cin >> t; while (t--) // #endif solve(); cout.flush(); }
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 51 52 53 54 55 56 57 58 59 60 | #include <bits/stdc++.h> constexpr int MAXN = 500001; using namespace std; void solve() { int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a.begin(), a.end()); int prev = a[0]; int cnt = 0; vector<int> cnts; for (int v : a) { if (v == prev) { cnt++; } else { cnts.push_back(cnt); cnt = 1; prev = v; } } cnts.push_back(cnt); sort(cnts.begin(), cnts.end()); int res = 0; int j = size(cnts) - 1; int i = 0; while (i <= j) { if (!cnts[j]) break; res++; int rem = cnts[j] - 1; while (i < j && rem) { int diff = min(rem, cnts[i]); if (diff) { rem -= diff; cnts[i] -= diff; } if (!cnts[i]) i++; } j--; } cout << res << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); // #ifdef LOCAL // int t; cin >> t; while (t--) // #endif solve(); cout.flush(); } |