#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <sstream>
int main() {
int n;
std::cin >> n;
std::cin.ignore(); // Ignore newline after reading n
std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
std::string city;
std::map<std::string, int> cityCounts;
// Count occurrences of each city
while (iss >> city) {
cityCounts[city]++;
}
int maxStamps = 0;
// Map of counts to the number of cities having that count
std::map<int, int> counts;
for (const auto& pair : cityCounts) {
counts[pair.second]++;
if (pair.second > maxStamps) {
maxStamps = pair.second;
}
}
std::vector<std::pair<int, int>> countCounts;
for (const auto& count : counts) {
countCounts.push_back(count);
}
// Sort in ascending order of stamp counts (implicitly done by the map)
std::string outStr = std::to_string(n); // for k = 1
for (int k = 2; k <= maxStamps; ++k) {
int stampsGiven = 0;
for (const auto& [cityCnt, numCities] : countCounts) {
if (cityCnt >= k) {
stampsGiven += (cityCnt / k) * numCities * k;
}
}
outStr += " " + std::to_string(stampsGiven);
}
// Handle cases where n > maxStamps
for (int i = maxStamps + 1; i <= n; ++i) {
outStr += " 0";
}
std::cout << outStr << std::endl;
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 | #include <iostream> #include <map> #include <vector> #include <string> #include <sstream> int main() { int n; std::cin >> n; std::cin.ignore(); // Ignore newline after reading n std::string line; std::getline(std::cin, line); std::istringstream iss(line); std::string city; std::map<std::string, int> cityCounts; // Count occurrences of each city while (iss >> city) { cityCounts[city]++; } int maxStamps = 0; // Map of counts to the number of cities having that count std::map<int, int> counts; for (const auto& pair : cityCounts) { counts[pair.second]++; if (pair.second > maxStamps) { maxStamps = pair.second; } } std::vector<std::pair<int, int>> countCounts; for (const auto& count : counts) { countCounts.push_back(count); } // Sort in ascending order of stamp counts (implicitly done by the map) std::string outStr = std::to_string(n); // for k = 1 for (int k = 2; k <= maxStamps; ++k) { int stampsGiven = 0; for (const auto& [cityCnt, numCities] : countCounts) { if (cityCnt >= k) { stampsGiven += (cityCnt / k) * numCities * k; } } outStr += " " + std::to_string(stampsGiven); } // Handle cases where n > maxStamps for (int i = maxStamps + 1; i <= n; ++i) { outStr += " 0"; } std::cout << outStr << std::endl; return 0; } |
English