#include <vector>
#include <iostream>
#include <algorithm>
#include <unordered_map>
int main() {
int count;
std::cin >> count;
std::vector<int> cities;
cities.reserve(count);
std::unordered_map<int, int> citiesMap;
for (int i = 0; i < count; i++) {
int tmp;
std::cin >> tmp;
citiesMap[tmp]++;
}
for (auto& entry : citiesMap) {
cities.push_back(entry.second);
}
std::sort(cities.begin(), cities.end(), std::greater<int>{});
std::vector<int> result(count + 1, 0);
for (int i = 1; i <= count; i++) {
int sum{0};
for (int j = 0; j < cities.size(); j++) {
int currentAmount = cities[j];
int remainder = currentAmount % i;
int toBeAdded = currentAmount - remainder;
if (toBeAdded == 0) {
break;
}
sum += toBeAdded;
}
result[i] = sum;
}
for (int i = 1; i <= count; i++) {
std::cout << result[i] << (i < count ? " " : "");
}
std::cout << "\n";
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 | #include <vector> #include <iostream> #include <algorithm> #include <unordered_map> int main() { int count; std::cin >> count; std::vector<int> cities; cities.reserve(count); std::unordered_map<int, int> citiesMap; for (int i = 0; i < count; i++) { int tmp; std::cin >> tmp; citiesMap[tmp]++; } for (auto& entry : citiesMap) { cities.push_back(entry.second); } std::sort(cities.begin(), cities.end(), std::greater<int>{}); std::vector<int> result(count + 1, 0); for (int i = 1; i <= count; i++) { int sum{0}; for (int j = 0; j < cities.size(); j++) { int currentAmount = cities[j]; int remainder = currentAmount % i; int toBeAdded = currentAmount - remainder; if (toBeAdded == 0) { break; } sum += toBeAdded; } result[i] = sum; } for (int i = 1; i <= count; i++) { std::cout << result[i] << (i < count ? " " : ""); } std::cout << "\n"; return 0; } |
English