// 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'; } |
English