#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define ll long long
#define ld long double
#define ull unsigned long long
void dbg_out() { cout << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); }
#define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
void solve()
{
  ll n;
  cin >> n;
  vector<ll> list(n, 0), krotnosc;
  for(auto &el : list) cin >> el;
  map<ll, ll> mp;
  for(auto el : list) mp[el]++;
  for(auto el : mp){
    krotnosc.push_back(el.second);
  }
  sort(krotnosc.begin(), krotnosc.end(), greater());
  // for(auto el : krotnosc) cout << el << " ";
  // cout << endl;
  ll r = krotnosc.size()-1, res=0;
  for(ll l = 0; l <= r; l++){
    ll suma = 0;
    while(l < r && suma+krotnosc[r] < krotnosc[l]){
      suma += krotnosc[r];
      r--;
    }
    // cout << "jeden: ";
    // dbg(suma);
    if(l < r && suma < krotnosc[l]-1){
      // cout << "wykonane\n";
      // dbg((krotnosc[l]-1) - suma);
      krotnosc[r] -= (krotnosc[l]-1) - suma;
      suma += (krotnosc[l]-1) - suma;
    }
    // cout << "dwa: ";
    // dbg(suma);
    res++;
    // for(auto el : krotnosc) cout << el << " ";
    // cout << endl;
    // dbg(l, r);
  }
  cout << res << endl;
}
 
int main()
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
// #ifndef ONLINE_JUDGE
//   freopen("../../in.in", "r", stdin);
//   freopen("../../out.out", "w", stdout);
// #endif
  
  solve();
  
}
        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 61 62 63 64 65  | #include <bits/stdc++.h> using namespace std; #define endl "\n" #define ll long long #define ld long double #define ull unsigned long long void dbg_out() { cout << endl; } template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); } #define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__) void solve() { ll n; cin >> n; vector<ll> list(n, 0), krotnosc; for(auto &el : list) cin >> el; map<ll, ll> mp; for(auto el : list) mp[el]++; for(auto el : mp){ krotnosc.push_back(el.second); } sort(krotnosc.begin(), krotnosc.end(), greater()); // for(auto el : krotnosc) cout << el << " "; // cout << endl; ll r = krotnosc.size()-1, res=0; for(ll l = 0; l <= r; l++){ ll suma = 0; while(l < r && suma+krotnosc[r] < krotnosc[l]){ suma += krotnosc[r]; r--; } // cout << "jeden: "; // dbg(suma); if(l < r && suma < krotnosc[l]-1){ // cout << "wykonane\n"; // dbg((krotnosc[l]-1) - suma); krotnosc[r] -= (krotnosc[l]-1) - suma; suma += (krotnosc[l]-1) - suma; } // cout << "dwa: "; // dbg(suma); res++; // for(auto el : krotnosc) cout << el << " "; // cout << endl; // dbg(l, r); } cout << res << endl; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // #ifndef ONLINE_JUDGE // freopen("../../in.in", "r", stdin); // freopen("../../out.out", "w", stdout); // #endif solve(); }  | 
            
        
                    English