#include <iostream>
#include <cstdint>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
map<uint32_t, uint8_t> mp;
uint32_t num {};
uint32_t tmp {};
uint32_t result {};
cin >> num;
for (uint32_t i {}; i < num; i++)
{
cin >> tmp;
mp[tmp]++;
}
// for (auto &a: mp)
// cout << a.first << ", " << static_cast<int>(a.second) << endl;
//
// cout << "\n++++++++++++++++++++++++++++++++\n";
vector<uint8_t> vec;
for(const auto &pair: mp)
vec.push_back(pair.second);
// cout << "=====================================\n";
// for(const auto &a: vec)
// cout << static_cast<int>(a) << " ";
sort(vec.begin(), vec.end(), greater<uint8_t>());
// cout << "\n=====================================\n";
// for(const auto &a: vec)
// cout << static_cast<int>(a) << " ";
while (!vec.empty())
{
tmp = vec.front() - 1;
while (tmp > 0)
{
if (tmp >= vec.back())
{
tmp -= vec.back();
vec.pop_back();
}
else
{
vec.back() -= tmp;
tmp = 0;
}
}
result++;
vec.erase(vec.begin());
}
cout << static_cast<int>(result);
return 0;
}
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 <iostream> #include <cstdint> #include <map> #include <vector> #include <algorithm> using namespace std; int main() { map<uint32_t, uint8_t> mp; uint32_t num {}; uint32_t tmp {}; uint32_t result {}; cin >> num; for (uint32_t i {}; i < num; i++) { cin >> tmp; mp[tmp]++; } // for (auto &a: mp) // cout << a.first << ", " << static_cast<int>(a.second) << endl; // // cout << "\n++++++++++++++++++++++++++++++++\n"; vector<uint8_t> vec; for(const auto &pair: mp) vec.push_back(pair.second); // cout << "=====================================\n"; // for(const auto &a: vec) // cout << static_cast<int>(a) << " "; sort(vec.begin(), vec.end(), greater<uint8_t>()); // cout << "\n=====================================\n"; // for(const auto &a: vec) // cout << static_cast<int>(a) << " "; while (!vec.empty()) { tmp = vec.front() - 1; while (tmp > 0) { if (tmp >= vec.back()) { tmp -= vec.back(); vec.pop_back(); } else { vec.back() -= tmp; tmp = 0; } } result++; vec.erase(vec.begin()); } cout << static_cast<int>(result); return 0; } |
English