// // Created by piotr on 11.03.2024. // #include <algorithm> #include <cstdio> #include <vector> int main() { int N; std::vector<int> numbers; scanf("%d", &N); numbers.resize(N); for (int& number : numbers) { scanf("%d", &number); } std::sort(numbers.begin(), numbers.end()); std::vector<int> counts; counts.reserve(N); int prev_number = 0; for (int number : numbers) { if (number == prev_number) { counts.back()++; } else { counts.push_back(1); prev_number = number; } } std::sort(counts.begin(), counts.end()); auto i_small = counts.begin(); auto i_large = counts.end() - 1; int result = 0; do { int max_left = *i_large - 1; *i_large-- = 0; while (i_small <= i_large && max_left > 0) { if (*i_small <= max_left) { max_left -= *i_small; *i_small++ = 0; } else { *i_small -= max_left; max_left = 0; } } ++result; } while (i_small <= i_large); printf("%d\n", result); }
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 | // // Created by piotr on 11.03.2024. // #include <algorithm> #include <cstdio> #include <vector> int main() { int N; std::vector<int> numbers; scanf("%d", &N); numbers.resize(N); for (int& number : numbers) { scanf("%d", &number); } std::sort(numbers.begin(), numbers.end()); std::vector<int> counts; counts.reserve(N); int prev_number = 0; for (int number : numbers) { if (number == prev_number) { counts.back()++; } else { counts.push_back(1); prev_number = number; } } std::sort(counts.begin(), counts.end()); auto i_small = counts.begin(); auto i_large = counts.end() - 1; int result = 0; do { int max_left = *i_large - 1; *i_large-- = 0; while (i_small <= i_large && max_left > 0) { if (*i_small <= max_left) { max_left -= *i_small; *i_small++ = 0; } else { *i_small -= max_left; max_left = 0; } } ++result; } while (i_small <= i_large); printf("%d\n", result); } |