#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <unordered_map>
int main() {
    int liczb;
    int liczba;
    int liczba_list = 0;
    std::unordered_map<int, int> licznosc;
    std::vector<int> kolejnosc;
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cin >> liczb;
    for (int i=0; i<liczb; ++i) {
        std::cin >> liczba;
        licznosc[liczba]++;
    }
    kolejnosc.reserve(licznosc.size());
    for (auto &elem: licznosc) {
        kolejnosc.emplace_back(elem.second);
    }
    std::sort(kolejnosc.rbegin(), kolejnosc.rend());
    for (size_t i=0; i<kolejnosc.size(); ++i) {
        // std::cerr << kolejnosc[i] << " ";
    }
    // std::cerr << "\n";
    {
        int pierwsza = 0;
        int ostatnia = kolejnosc.size()-1;
        while (true) {
            ++liczba_list;
            int miejsc = kolejnosc[pierwsza] - 1;
            // std::cerr << (miejsc + 1) << ": ";
            while (miejsc && pierwsza < ostatnia) {
                if (kolejnosc[ostatnia] <= miejsc) {
                    // std::cerr << (kolejnosc[ostatnia]) << ", ";
                    miejsc -= kolejnosc[ostatnia];
                    --ostatnia;
                } else {
                    // std::cerr << miejsc << "z" << (kolejnosc[ostatnia]) << ", ";
                    kolejnosc[ostatnia] -= miejsc;
                    miejsc = 0;
                }
            }
            // std::cerr << "\n";
            ++pierwsza;
            if (ostatnia < pierwsza) {
                break;
            }
        }
    }
    std::cout << liczba_list << "\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 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  | #include <iostream> #include <vector> #include <algorithm> #include <map> #include <unordered_map> int main() { int liczb; int liczba; int liczba_list = 0; std::unordered_map<int, int> licznosc; std::vector<int> kolejnosc; std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cin >> liczb; for (int i=0; i<liczb; ++i) { std::cin >> liczba; licznosc[liczba]++; } kolejnosc.reserve(licznosc.size()); for (auto &elem: licznosc) { kolejnosc.emplace_back(elem.second); } std::sort(kolejnosc.rbegin(), kolejnosc.rend()); for (size_t i=0; i<kolejnosc.size(); ++i) { // std::cerr << kolejnosc[i] << " "; } // std::cerr << "\n"; { int pierwsza = 0; int ostatnia = kolejnosc.size()-1; while (true) { ++liczba_list; int miejsc = kolejnosc[pierwsza] - 1; // std::cerr << (miejsc + 1) << ": "; while (miejsc && pierwsza < ostatnia) { if (kolejnosc[ostatnia] <= miejsc) { // std::cerr << (kolejnosc[ostatnia]) << ", "; miejsc -= kolejnosc[ostatnia]; --ostatnia; } else { // std::cerr << miejsc << "z" << (kolejnosc[ostatnia]) << ", "; kolejnosc[ostatnia] -= miejsc; miejsc = 0; } } // std::cerr << "\n"; ++pierwsza; if (ostatnia < pierwsza) { break; } } } std::cout << liczba_list << "\n"; }  | 
            
        
                    English