// Witold Milewski // PA 2024 #include <bits/stdc++.h> using namespace std; #define FOR(i, a, b) for(int i=a; i<=b; ++i) #define eb emplace_back #define sz(A) (int)(A.size()) const int maxn=5e5+7; int A[maxn], n, ile[maxn]; int main() { cin.tie(0) -> ios_base::sync_with_stdio(0); cin >> n; FOR(i, 1, n) { cin >> A[i]; ++ile[A[i]]; } vector<int> grupy; for(int i=maxn-1; i>=0; --i) if(ile[i]>0) grupy.eb(ile[i]); sort(grupy.begin(), grupy.end(), greater<int>()); int res=0; for(int i=0; i<=sz(grupy)-1; ++i) { ++res; int v = grupy[i]-1; while(v>0 && sz(grupy)-1>i) { int ile = min(grupy.back(), v); grupy[sz(grupy)-1]-=ile; v-=ile; if(grupy[sz(grupy)-1]==0) grupy.pop_back(); } } cout << res << '\n'; }
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 | // Witold Milewski // PA 2024 #include <bits/stdc++.h> using namespace std; #define FOR(i, a, b) for(int i=a; i<=b; ++i) #define eb emplace_back #define sz(A) (int)(A.size()) const int maxn=5e5+7; int A[maxn], n, ile[maxn]; int main() { cin.tie(0) -> ios_base::sync_with_stdio(0); cin >> n; FOR(i, 1, n) { cin >> A[i]; ++ile[A[i]]; } vector<int> grupy; for(int i=maxn-1; i>=0; --i) if(ile[i]>0) grupy.eb(ile[i]); sort(grupy.begin(), grupy.end(), greater<int>()); int res=0; for(int i=0; i<=sz(grupy)-1; ++i) { ++res; int v = grupy[i]-1; while(v>0 && sz(grupy)-1>i) { int ile = min(grupy.back(), v); grupy[sz(grupy)-1]-=ile; v-=ile; if(grupy[sz(grupy)-1]==0) grupy.pop_back(); } } cout << res << '\n'; } |