#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