#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"; } |